gpt4 book ai didi

string - 如何用 R 中的字符串替换数据框中的值?

转载 作者:行者123 更新时间:2023-12-02 06:23:47 25 4
gpt4 key购买 nike

简短版本:如何用另一个数据框中找到的字符串替换数据框中的值?

更长的版本:我是一名生物学家,研究多种蜜蜂。我有一个包含数千只蜜蜂的数据集。每行都有一个唯一的蜜蜂 ID # 以及有关该样本的所有相关信息(捕获数据、GPS 位置等)。每只蜜蜂的物种信息尚未输入,因为识别它们需要很长时间。当IDing时,我最终得到了数百只蜜蜂的盒子,它们都是同一物种。我将这些输入到一个单独的数据框中。我正在尝试编写代码,在识别蜜蜂时用物种信息(科、属、种、性别等)更新原始数据文件。目前,在原始数据文件中,物种信息为空,在 R 中被解释为 NA。我想让 R 找到所有唯一的蜜蜂 ID # 并填写物种信息,但我无法弄清楚如何将 NA 值替换为字符串(例如“Andrenidae”)

这是我正在尝试做的一个简单示例:

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 而不是每次添加新列的方法?提前致谢!

最佳答案

这是一个我认为适合您的功能。这使用 match 来查找注释数据框中的值并建立索引,然后替换 rawData 中的值。

replaceID <- function(to,from,mergeBy,values){
x <- match(from[,mergeBy],to[,mergeBy])
to[,values][x] <- as.character(from[,values])
return(to)
}
> rawData <- replaceID(rawData,Halictidae,"beeID","family")
> rawData
beeID family
1 1 <NA>
2 2 Halictidae
3 3 <NA>
4 4 <NA>
5 5 Halictidae
6 6 <NA>
7 7 <NA>
8 8 Halictidae
9 9 <NA>
10 10 <NA>
11 11 Halictidae
12 12 <NA>
13 13 <NA>
14 14 Halictidae
15 15 <NA>
16 16 <NA>
17 17 Halictidae
18 18 <NA>
19 19 <NA>
20 20 Halictidae

关于string - 如何用 R 中的字符串替换数据框中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com