根据条件,将某些数据帧值替换为另一个数据帧中的值

时间:2016-06-08 13:39:06

标签: r dataframe

我有一个类似的数据框:

> 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的{​​{1}}列中的值替换为df的{​​{1}}中的值,但仅限于B2p的值数据框和id

最终的数据框应为:

df$Source == "Ap"

我知道如何用零或 id B C Source 1 015 8 4 Gk 2 335 5 1 Ap 3 625 3 4 Ap 4 789 6 6 Kh 等替换整个列,但我只想替换那些遵循上述条件的那些(并且没有for循环......)。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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