如何将R中同id含缺失值的多行数据合并为单行整洁格式
R语言同id多行合并为单行的最简实现
方案1:tidyverse通用方案(支持所有数据类型)
你之前测试summarise仅支持数值类变量,是因为未指定适配多类型的汇总逻辑。如下代码通过按id、group分组后提取各变量的唯一非NA值实现合并,兼容数值、因子、字符等所有类型:
library(tidyverse) dat_tidy <- dat %>% # group和id一一绑定,直接纳入分组键即可 group_by(id, group) %>% # 对所有列取非NA的第一个值,适配全类型 summarise(across(everything(), ~ na.omit(.x)[1]), .groups = "drop")
方案2:tidyr填充逻辑实现
也可以通过值填充后取首行的逻辑实现,适合需要灵活控制填充方向的场景:
dat_tidy <- dat %>% arrange(id) %>% group_by(id, group) %>% # 上下双向填充所有列的NA值 fill(everything(), .direction = "downup") %>% # 取每组第一行即可得到完整观测 slice(1) %>% ungroup()
方案3:无依赖的base R实现
无需加载第三方包的原生实现:
dat_tidy <- aggregate(. ~ id + group, data = dat, FUN = function(x) na.omit(x)[1])
内容的提问来源于stack exchange,提问作者Tom Küffer
相关产品推荐
相关产品推荐

