我有一个类似的数据框:
> 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}}中的值,但仅限于B2
中p
的值数据框和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循环......)。我怎样才能做到这一点?
答案 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