3

我有两个数据文件。第一个是我正在编译数据的“主表”,相关列如下所示:

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

其中 size 是我要填写的列。我需要将来的分析 ID 包含属名和种名。大小数据基于单独文件中的属(ID 中的第一个单词),如下所示:

 Genus        Size
Empidonax     13
Conopophaga   6

R中有没有办法说匹配ID列中的某些而不是全部文本,然后才能填写Size列?期望的结果

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

或者将 ID 列一分为二,填写 Size 然后将两者合并在一起会更简单吗?

谢谢

4

2 回答 2

4

如果master并且size是您的数据框,您可以创建一个 Genus 列,然后用于merge获取组合数据框。

#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 回答