r-合并data.frame中的重叠列



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

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

Reprex

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

创建于2021-07-23由reprex包(v2.0.0(

使用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))

希望这接近你想要的。

最新更新