gpt4 book ai didi

r - 在不使用 for 循环的情况下匹配 R 数据帧之间的值

转载 作者:行者123 更新时间:2023-12-02 18:41:49 34 4
gpt4 key购买 nike

我有以下数据框:

db1 = data.frame(name = c('a', 'b', 'c', 'd'), age = c('10', '20', '30', '40'), tier = NA)
db2 = data.frame(name = c('a', 'a', 'c', 'b'), age = c('10', '10', '30', '20'), tier = c('1', '3', '4', '2'))

如果名称年龄变量匹配。

我可以使用 for 循环来完成此操作,但是当我们处理数千行时,这需要太长时间。有没有更快的方法来做到这一点?

for (i in 1:nrow(db1)){
for (j in 1:nrow(db2)){
if (db1$name[i] == db2$name[j] & db1$age[i] == db2$age[j]){
db1$tier[i] = db2$tier[j]
}
}
}

最佳答案

当采用第一个时,如果它匹配多次也可以(您的代码采用最后一个),您可以使用match和对于具有交互的多列。

db1$tier <- db2$tier[match(interaction(db1[c("name","age")]),
interaction(db2[c("name","age")]))]
db1
# name age tier
#1 a 10 1
#2 b 20 2
#3 c 30 4
#4 d 40 <NA>

或者使用另外的`rev来获取最后一个匹配(就像你的代码所做的那样)。

db1$tier <- rev(db2$tier)[match(interaction(db1[c("name","age")]),
rev(interaction(db2[c("name","age")])))]
db1
# name age tier
#1 a 10 3
#2 b 20 2
#3 c 30 4
#4 d 40 <NA>

关于r - 在不使用 for 循环的情况下匹配 R 数据帧之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67905122/

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