合并 data.frame 中的重叠列

Merging Overlapping Columns in data.frame

我有一个新创建的 data.frame,它是通过一个公共键连接另外两个帧的结果,但它们恰好在缺少数据的地方重叠。

我将如何成功地将它们合并在一起?

代表

df <- data.frame(Index = c(1:5), Label.x = c("A", NA, NA, "D", "E"), Label.y = c(NA, "B", "C", NA, NA))
df
    Index Label.x Label.y
    1       A    <NA>
    2    <NA>       B
    3    <NA>       C
    4       D    <NA>
    5       E    <NA>

期望的结果

Index Label
1     A
2     B
3     C
4     D
5     E
df <-
  data.frame(
    Index = c(1:5),
    Label.x = c("A", NA, NA, "D", "E"),
    Label.y = c(NA, "B", "C", NA, NA)
  )

library(dplyr)
df %>% 
  transmute(Label = coalesce(Label.x, Label.y))
#>   Label
#> 1     A
#> 2     B
#> 3     C
#> 4     D
#> 5     E

reprex package (v2.0.0)

于 2021-07-23 创建

dplyr:

df %>%
  mutate(Label = coalesce(Label.x,Label.y)) %>%
  select(Index, Label)

输出:

  Index Label
1     1     A
2     2     B
3     3     C
4     4     D
5     5     E

这是一个解决方案,仅当您每行恰好有 1 个缺失值时才有效,如您的示例所示:

df$Label <- ifelse(is.na(df$Label.x),df$Label.y,df$Label.x)
df <- df[,c("Index","Label")] 

首先你应该通过做这样的事情来检查是否是这种情况,看看答案是否正确:

all(apply(df,1,function(x) sum(is.na(x))==1))

希望这接近您要查找的内容。