我想根据匹配变量(如果有)和其他条件(如果没有)在数据框中添加一个新列.当我使用match
函数时,我意识到数据框之间的不一致(字面上把它搞砸了-我知道,索引)和主数据框有重复的观测,而第二个数据框中的观测是唯一的.
下面是模拟的数据帧:
df = data.frame(kin1 = c("392", "392", "694", "615", "392", NA, "782"),
anon = c("D1","D2","D3","D4", "D5","D6", "D7"))
df2 = data.frame(id = c("424","392", "615","429"),
rep = c("H1", "H2", "H3", "H4"))
我想做的是为第一个数据框创建第三列,并满足以下条件:
-
- 如果
df
中kin1
列中的变量与 变量id
列,则df
中的新列应该 取df2
的第rep
列中的值.
- 如果
-
- 如果
df
的kin1
列中的变量是NA
,则df
中的新列也应该是NA
.
- 如果
-
- 最后,如果两个条件都不满足,则
df
中的新列应该 取同一数据帧的anon
列中的值.
- 最后,如果两个条件都不满足,则
所以我想要的输出应该是:
desired.df
kin1 anon new_id
1 392 D1 H2
2 392 D2 H2
3 694 D3 D3
4 615 D4 H3
5 392 D5 H2
6 <NA> D6 <NA>
7 782 D7 D7
我已经try 了嵌套的for循环,它似乎很有效,但我的实际数据是海量的,所以我真的需要更智能、更快的方法来解决我的问题.
先谢谢你.