合并两个数据帧并保留非缺失条目

问题描述 投票:0回答:1

我有两个这样的数据框:

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>

本题中的数据只是一些虚拟数据。在我的实际用例中,两个数据框中有很多列。因此,我正在寻找的函数仅在两个数据帧具有相同的列名称时保留非缺失条目。如果一列仅出现在一个数据框中,它也应该出现在最终数据中。如何实现?

r dataframe merge missing-data
1个回答
0
投票

或许你可以尝试一下

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>
© www.soinside.com 2019 - 2024. All rights reserved.