3

2つのデータファイルがあります。1つ目は、データをコンパイルする「マスターシート」で、関連する列は次のようになります。

Family          ID                     Size
Tyrannidae      Empidonax traillii
Tyrannidae      Empidonax atriceps
Conopophagidae  Conopophaga lineata

サイズは入力したい列です。将来の分析IDには、属名と種名の両方を含める必要があります。サイズデータは、次のような別のファイルの属(IDの最初の単語)に基づいています。

 Genus        Size
Empidonax     13
Conopophaga   6

Rに、ID列のすべてではなく特定のテキストを一致させて、[サイズ]列に入力できるようにする方法はありますか?望ましい結果

Family          ID                     Size
Tyrannidae      Empidonax traillii     13
Tyrannidae      Empidonax atriceps     13
Conopophagidae  Conopophaga lineata    6

または、ID列を2つに分割し、サイズを入力してから、2つをマージして戻す方が簡単でしょうか。

ありがとう

4

2 に答える 2

4

If master and size are your data frames, you could create a Genus column and then use merge to get the combined data frame.

#regex deletes all characters after a space
master$Genus <- gsub(" .*$","",master$ID) 
merge(master,size,by="Genus")
于 2013-01-24T15:10:22.913 に答える
3

data.table有効にしているので、X[Y]非常に適切に思えます。したがって、ここにdata.table解決策があります:

require(data.table)
master <- data.table(Family=c("Tyrannidae", "Tyrannidae", "Conopophagidae"), 
          ID = c("Empidonax traillii", "Empidonax traillii", "Conopophaga lineata"))
dt <- data.table(Genus = c("Empidonax", "Conopophaga"), Size = c(13, 6))

# get Genus
master[, Genus := gsub(" .*$", "", ID)] # master$ID replaced by ID
# set key to Genus
setkey(master, "Genus")
> master[dt] # X[Y]

#          Genus         Family                  ID Size
# 1:   Empidonax     Tyrannidae  Empidonax traillii   13
# 2:   Empidonax     Tyrannidae  Empidonax traillii   13
# 3: Conopophaga Conopophagidae Conopophaga lineata    6
于 2013-01-24T15:24:01.427 に答える