我有两个数据文件。第一个是我正在编译数据的“主表”,相关列看起来像:
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列拆分为两个更简单,填写Size然后将两者合并在一起?
谢谢
答案 0 :(得分:4)
如果master
和size
是您的数据框,您可以创建一个Genus列,然后使用merge
获取合并的数据框。
#regex deletes all characters after a space
master$Genus <- gsub(" .*$","",master$ID)
merge(master,size,by="Genus")
答案 1 :(得分: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