我有两个这样的数据框:
df1 <- data.frame(id= 1:4, sex= c("m", "m", NA, NA))
df2 <- data.frame(id= 1:6, sex= c("m", NA, "m", NA, "m", NA))
我想合并它们。我所做的是:
df_both <- merge(df1, df2, by= "id", all= TRUE)
df_both
id sex.x sex.y
1 1 m m
2 2 m <NA>
3 3 <NA> m
4 4 <NA> <NA>
5 5 <NA> m
6 6 <NA> <NA>
我不希望合并的数据框有两列 sex.x 和 sex.y。相反,我想要一个包含非缺失条目的性别列。所以我期望得到的是:
df_wanted <- data.frame(id= 1:6, sex= c("m", "m", "m", NA, "m", NA))
df_wanted
id sex
1 1 m
2 2 m
3 3 m
4 4 <NA>
5 5 m
6 6 <NA>
本题中的数据只是一些虚拟数据。在我的实际用例中,两个数据框中有很多列。因此,我正在寻找的函数仅在两个数据帧具有相同的列名称时保留非缺失条目。如果一列仅出现在一个数据框中,它也应该出现在最终数据中。如何实现?
或许你可以尝试一下
transform(
df2,
sex = ifelse(!is.na(sex), sex, with(df1, setNames(sex, id))[as.character(id)])
)
这给出了
id sex
1 1 m
2 2 m
3 3 m
4 4 <NA>
5 5 m
6 6 <NA>