如何按segments列相同内容合并分类变量行
解决方案
你可以用dplyr的分组汇总方法实现需求,因为每个segments分组下的每列最多只有一个非NA值,直接提取该非NA值即可:
library(dplyr) # 你的原始数据 df <- tibble(segments=c('Hello','Hello', 'Hello', 'Block', 'Block', 'Hi', 'Hi', 'Hi'), year=c(2015, 2015,2015,2017, 2017, 2015,2015,2015), Colour=c('Yellow', NA,NA, 'Pink', NA, NA, 'Green', NA), Eval=c(NA, 'Yes',NA, NA, 'No', 'No', NA, NA), Ball=c(NA, NA, 'A', NA, NA, NA,NA, 'B')) # 合并行 df1 <- df %>% group_by(segments) %>% summarise_all(~first(na.omit(.))) %>% ungroup()
运行后得到的结果与你预期一致:
# A tibble: 3 × 5 segments year Colour Eval Ball <chr> <dbl> <chr> <chr> <chr> 1 Hello 2015 Yellow Yes A 2 Block 2017 Pink No NA 3 Hi 2015 Green No B
补充说明
first(na.omit(.))的逻辑:对每个分组的每一列,先过滤掉所有NA,再取剩下的唯一非NA值;如果整列都是NA,就返回NA。- 也可以用
coalesce函数实现同样效果,代码如下:
df1 <- df %>% group_by(segments) %>% summarise(across(everything(), ~coalesce(!!!.))) %>% ungroup()
内容的提问来源于stack exchange,提问作者Nuria
相关产品推荐
相关产品推荐

