我有一个新创建的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))
希望这接近你想要的。