我有两个具有相同列名但数据长度不同的数据帧。示例:
sf<-data.frame(a=c(1,5,9),b=c(2,6,4))
sf
a b
1 1 2
2 5 6
3 9 4
lf<-data.frame(a=1:10,b=rep(0,10))
lf
a b
1 1 0
2 2 0
3 3 0
4 4 0
5 5 0
6 6 0
7 7 0
8 8 0
9 9 0
10 10 0
我想将lf$b
的值填入sf$b
中a
列相同的值(即sf$a
等于lf$a
)的值。因此,结果应该是:
a b
1 1 2
2 2 0
3 3 0
4 4 0
5 5 6
6 6 0
7 7 0
8 8 0
9 9 4
10 10 0
在R中有快速的方法吗?
谢谢!
答案 0 :(得分:2)
如果您的意思是sf$a
引用lf
的行索引,则以下内容应该有效:
lf[sf$a, ]$b = sf$b
但是,如果您要更新lf
lf$a
匹配sf$a
的行,那么您可以执行以下操作:
lf[lf$a %in% sf$a, ]$b = sf$b
答案 1 :(得分:1)
以下是使用data.table
library(data.table)
setkey(setDT(sf),a)[lf][is.na(b), b:=i.b][, i.b:=NULL][]
# a b
# 1: 1 2
# 2: 2 0
# 3: 3 0
# 4: 4 0
# 5: 5 6
# 6: 6 0
# 7: 7 0
# 8: 8 0
# 9: 9 4
# 10: 10 0
或base R
选项
transform(merge(lf, sf, by='a', all=TRUE), b= ifelse(is.na(b.y),
b.x,b.y))[-c(2:3)]