简短版本:如何用在另一个数据框中找到的字符串替换数据框中的值?
更长的版本:我是一名生物学家,研究多种蜜蜂。我有一个包含数千只蜜蜂的数据集。每行都有一个唯一的蜜蜂 ID # 以及有关该标本的所有相关信息(捕获数据、GPS 位置等)。没有输入每只蜜蜂的物种信息,因为识别它们需要很长时间。在 IDing 时,我最终得到了一盒数百只蜜蜂,它们都是同一物种。我将这些输入到一个单独的数据框中。我正在尝试编写代码,当我识别蜜蜂时,将使用物种信息(家庭、属、物种、性别等)更新原始数据文件。目前,在原始数据文件中,物种信息是空白的,在 R 中被解释为 NA。我想让 R 找到所有唯一的蜜蜂 ID #'s 并填写物种信息,
这是我正在尝试做的一个简单示例:
rawData<-data.frame(beeID=c(1:20),family=rep(NA,20))
speciesInfo<-data.frame(beeID=seq(1,20,3),family=rep("Andrenidae",7))
rawData[rawData$beeID == 4,"family"] <- speciesInfo[speciesInfo$beeID == 4,"family"]
所以,我要替换我想要的东西,但是用一个数字而不是姓氏(一个字符串)。我最终想做的是编写一个小循环来添加所有物种信息,例如:
for (i in speciesInfo$beeID){
rawData[rawData$beeID == i,"family"] <- speciesInfo[speciesInfo$beeID == i,"family"]
}
提前感谢您的任何建议!
干杯,
扎克
编辑:
我刚刚注意到下面的前两种方法每次都会添加一个新列,如果我需要多次添加物种信息(我通常会这样做),这会导致问题。例如:
rawData<-data.frame(beeID=c(1:20),family=rep(NA,20))
Andrenidae<-data.frame(beeID=seq(1,20,3),family=rep("Andrenidae",7))
Halictidae<-data.frame(beeID=seq(1,20,3)+1,family=rep("Halictidae",7))
# using join
library(plyr)
rawData <- join(rawData, Andrenidae, by = "beeID", type = "left")
rawData <- join(rawData, Halictidae, by = "beeID", type = "left")
# using merge
rawData <- merge(x=rawData,y=Andrenidae,by='beeID',all.x=T,all.y=F)
rawData <- merge(x=rawData,y=Halictidae,by='beeID',all.x=T,all.y=F)
有没有办法折叠列以便我拥有一个统一的数据框?还是一种更新 rawData 而不是每次都添加新列的方法?提前致谢!