gpt4 book ai didi

r - 在 R 的范围列表中查找值列表

转载 作者:行者123 更新时间:2023-12-05 00:13:10 25 4
gpt4 key购买 nike

我有两个数据框:

set.seed(123)
myData<-data.frame(id=1:10, pos=21:30)
refData<-data.frame(id=letters[1:15], pos=sample(10:40,15))



看起来像那样
> myData 
id1 pos1
1 21
2 22
3 23
4 24
5 25
6 26
7 27
8 28
9 29
10 30
> refData
id2 pos2
a 18
b 33
c 21
d 34
e 35
f 11
g 23
h 31
i 22
j 20
k 30
l 19
m 32
n 39
o 36

我想要一个扩展的 myData 数据框。对于 myData 中的每一行,我想检查 refData 中是否存在距离小于 2 个数字的条目,如果是,我希望将 refData 的 ID 粘贴到 myData 的新列中。
最后我的新数据框应该是这样的:
 id1 pos1     newColumn
1 21 c, g, i, j, l
2 22 c, g, i, j
3 23 c, g, i
4 24 g, i
5 25 g
6 26
7 27
8 28 k
9 29 h, k
10 30 h, k, m

显然,我可以使用以下循环来做到这一点,效果很好:
myData$newColumn<-rep(NA, nrow(myData))
for(i in 1:nrow(myData)){
ww<-which(abs(refData$pos2 - myData$pos1[i]) <= 2)
myData$newColumn[i]<-paste(refData[ww,1],collapse=", ")
}

但是,我正在寻找一种非常快速的方法来做到这一点,因为我的真实数据大约有 10^6 个条目,而我的真实 refData 大约有 10^7 个条目。

我非常感谢 的任何帮助和想法快速方法来做到这一点!

最佳答案

你可以试试:

myData$newColumn = lapply(myData$pos, 
function(x) {paste(refData$id[abs(refData$pos-x)<3],collapse=', ')})

输出:
   id pos     newColumn
1 1 21 c, g, i, j, l
2 2 22 c, g, i, j
3 3 23 c, g, i
4 4 24 g, i
5 5 25 g
6 6 26
7 7 27
8 8 28 k
9 9 29 h, k
10 10 30 h, k, m

希望这可以帮助!

关于r - 在 R 的范围列表中查找值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48905915/

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