2016-06-08 173 views
2

我有一个数据帧,如:在另一个数据帧,基于条件与值替换数据帧的某些值

> df <- data.frame(id=c(015,335,625,789), B=c(8,19,8,6), C=c(4,1,4,6), Source=c("Gk", "Ap", "Ap", "Kh")) 

> df 

    id B C Source 
1 015 8 4  Gk 
2 335 19 1  Ap 
3 625 8 4  Ap 
4 789 6 6  Kh 

而另一数据框:

p <- data.frame(id=c(335,625, 789), B2 = c(5,3,4)) 
p 

    id B2 
1 335 5 
2 625 3 
3 789 4 

我想在B列替换那些值的df的值为B2p,但仅限于那些在数据框和df$Source == "Ap"中都有相同id的值。

最后的数据帧应该是:

id B C Source 
1 015 8 4  Gk 
2 335 5 1  Ap 
3 625 3 4  Ap 
4 789 6 6  Kh 

我知道如何更换由零或NA S,等整列,但我只是想以取代那些按照提到的条件(并没有for循环...)。我怎样才能做到这一点?

+0

在'df'你的ID是不一样'id'在df'的'定义。请编辑这个。 –

回答

1

的一种方法是,

df[df$Source == "Ap", "B"] <- p[p$id %in% df[df$Source == "Ap", "id"] , "B2"] 


# id B C Source 
#1 15 8 4  Gk 
#2 335 5 1  Ap 
#3 625 3 4  Ap 
#4 789 6 6  Kh 
+1

这正是我所期待的。谢谢! – LRD

相关问题