合并 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))
希望这接近您要查找的内容。
我有一个新创建的 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))
希望这接近您要查找的内容。