【发布时间】:2021-09-17 15:49:07
【问题描述】:
我有这种数据框(df1):
Code ID_CODE value_1 value_2 value_3
HA09U 98_ 10 57.80 NA NA
HA09U 98_ 11 57.80 NA NA
HA09U 98_ 12 57.80 NA NA
MB03L 99_ 10 NA 90.77 NA
MB03L 99_ 11 NA 90.77 NA
MB03L 99_ 12 NA 90.77 NA
KE17P 100_ 10 68.44 76.05 72.01
KE17P 100_ 11 68.44 76.05 72.01
KE17P 100_ 12 68.44 76.05 72.01
我想通过添加我的第二个数据帧 (df2) 中的值来替换包含 NA 的人的所有变量(value_1、value_2 和 value_3)的值:
Code value_1 value_2 value_3
HA09U 90.35 89.84 90.07
MB03L 66.94 79.62 73.77
结果应该是:
Code ID_CODE value_1 value_2 value_3
HA09U 98_ 10 90.35 89.84 90.07
HA09U 98_ 11 90.35 89.84 90.07
HA09U 98_ 12 90.35 89.84 90.07
MB03L 99_ 10 66.94 79.62 73.77
MB03L 99_ 11 66.94 79.62 73.77
MB03L 99_ 12 66.94 79.62 73.77
KE17P 100_ 10 68.44 76.05 72.01
KE17P 100_ 11 68.44 76.05 72.01
KE17P 100_ 12 68.44 76.05 72.01
我尝试使用一些 merge 和 bind_rows 函数,这个最接近我:
df1$value_1[df1$Code == df2$Code] <- df2$value_1
但它不起作用,并且以某种方式弄乱了数据框。
使用此代码
d1 <- left_join(df1, df2, by = "Code" )
用 df2 的值添加三个新列,但缺少 KE17P(已经拥有完整数据的人)的值。所以我真的在寻找替代功能。
【问题讨论】:
-
left_join()fromdplyr会给你你想要的。 -
我尝试了
df3<- left_join(df1, df2, by = "Code" ),到目前为止它一直有效......但是通过添加三个新列而不是替换原始列中的旧值来添加 df2 中的值 -
所以在你做
left_join之前从df1删除原始列... -
是的,但是原始数据帧要复杂得多,并且有多个 df2 中不存在的 ID 和行。因此,如果我删除它们,它们就会丢失,因为在新列中它们都有 NAs
-
然后重写你的问题,使其包含问题的所有显着特征。