【发布时间】:2021-06-09 13:28:03
【问题描述】:
我有以下数据框:
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'))
如果name 和age 变量匹配,我想将db2 中的tier 值输入到db1 的同一列中。
我可以使用 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]
}
}
}
【问题讨论】:
-
从
db1(db1$tier <- NULL) 中删除tier列。这将是一个简单的merge:merge(db1, db2)或者更具体的 -merge(db1, db2, by = c('name', 'age')) -
这行得通,谢谢。如果您发布答案,那么我会接受它
-
匹配两次怎么办?在你的情况下
name=a和age=10?拿第一个?