如何在R语言中按公共列拼接对应数值?
嘿,这个需求很常见!我给你两种在R里实现的方法,都能精准得到你想要的结果:
方法1:用Base R原生函数(无需额外安装包)
直接用基础R的aggregate()函数就能完成分组拼接,代码如下:
# 先定义你的原始数据 var = c("X","X","Y","Z","Z","Z") value = c(1,4,7,21,3,45) df = data.frame(var, value) # 按var分组,把对应value拼接成指定格式 df1 <- aggregate(value ~ var, data = df, FUN = function(x) { paste0("(", x, ")", collapse = ",") }) # 查看最终结果 print(df1)
运行后输出的结果就是你期望的:
var value 1 X (1),(4) 2 Y (7) 3 Z (21),(3),(45)
方法2:用tidyverse工具包(语法更直观)
如果你平时习惯用tidyverse生态的工具(比如dplyr),这种写法可读性更强。记得先安装并加载包:
# 首次使用先安装包 install.packages("tidyverse") library(tidyverse) # 原始数据 var = c("X","X","Y","Z","Z","Z") value = c(1,4,7,21,3,45) df = data.frame(var, value) # 分组后拼接value df1 <- df %>% group_by(var) %>% summarize( value = paste0("(", value, ")", collapse = ","), .groups = "drop" # 取消分组状态,转回普通数据框 ) # 查看结果 print(df1)
这个方法的输出和上面完全一致,.groups = "drop"是为了避免结果保留分组属性,方便后续操作。
内容的提问来源于stack exchange,提问作者suny
相关产品推荐
相关产品推荐

