R:从另一个柱中选择性填充柱

时间:2015-03-23 15:09:52

标签: r

我有两个具有相同列名但数据长度不同的数据帧。示例:

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$ba列相同的值(即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中有快速的方法吗?

谢谢!

2 个答案:

答案 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)]