如何按完整行分组,用相邻行同列非NA值填充NA并拼接值
实现方案(R 语言,基于 tidyverse 套件)
核心逻辑为两步:首先标记所有完整行生成分组ID,再按分组拼接每一列的非NA值,全程无冗余循环,代码简洁且执行效率高。
步骤1:构造示例输入数据
library(tidyverse) # 输入数据对应结构 df <- tibble( V1 = c("a", NA, NA, NA, "a1", NA), V2 = c("b", "f", NA, "j", "b1", NA), V3 = c("c", "g", NA, NA, "c1", "f1"), V4 = c("d", NA, "i", NA, "d1", "g1"), V5 = c("e", NA, NA, "k", "e1", NA) )
步骤2:核心处理代码
df_result <- df %>% # 识别完整行,每遇到一个完整行分组ID+1,后续相邻非完整行归属同一组 mutate(group_id = cumsum(if_all(everything(), ~!is.na(.x)))) %>% # 按分组聚合 group_by(group_id) %>% # 每一列拼接所有非NA值 summarise(across(everything(), ~paste0(na.omit(.x), collapse = ""))) %>% ungroup() %>% # 移除辅助生成的分组列 select(-group_id)
输出结果
print(df_result) # 输出: # # A tibble: 2 × 5 # V1 V2 V3 V4 V5 # <chr> <chr> <chr> <chr> <chr> # 1 a bfj cg di ek # 2 a1 b1 c1f1 d1g1 e1
如果是从本地文件读取数据,直接用read_csv()读取后直接执行上述处理代码即可。
内容的提问来源于stack exchange,提问作者younghyun
相关产品推荐
相关产品推荐

