R语言如何按多列等值合并dataframe行 分隔符拼接同组值
R按指定列分组合并行、拼接同列多值实现方案
核心逻辑是先按var1、var2、var3三列分组,再对其余列的非空值做拼接聚合,以下是两种可直接运行的实现方式。
方法1:dplyr实现(代码简洁,推荐)
适合日常使用tidyverse生态做数据处理的场景:
# 首次使用先执行安装命令 # install.packages("dplyr") library(dplyr) merged_df <- df %>% group_by(var1, var2, var3) %>% summarise( # 对所有非分组列,先剔除NA值再用分号拼接 across(everything(), ~paste(na.omit(.x), collapse = ";")), .groups = "drop" )
代码说明:
group_by传入的三个字段即为行合并的匹配键,只有这三列取值完全一致的行才会被合并na.omit(.x)用于过滤每列中的空值,避免拼接结果中出现无意义的NA文本collapse参数后的分号是多值之间的连接符,可以根据需要替换为逗号、顿号等任意字符.groups = "drop"用于移除聚合后的分组属性,返回普通dataframe结构
运行后得到的结果和预期完全一致:
| var1 | var2 | var3 | var4 | var5 |
|---|---|---|---|---|
| 1635 | Aa | 28 | apple | tree |
| 1729 | Bb | 85 | orange | |
| 1847 | Cc | 27 | pear | ground;desk |
方法2:基础R实现(无需安装第三方包)
如果不想额外安装依赖,可以直接用R自带函数实现:
merged_df <- aggregate( x = df[, c("var4", "var5")], by = list(var1 = df$var1, var2 = df$var2, var3 = df$var3), FUN = function(col) paste(na.omit(col), collapse = ";") )
两种方法输出结果完全相同。
内容的提问来源于stack exchange,提问作者ltong
相关产品推荐
相关产品推荐

