如何将R语言分组data.frame的words列合并为逗号分隔字符串?
合并分组字符串列的解决方案
你遇到的是R中很常见的分组合并字符串需求,之前尝试的方法没踩对点子,下面给你两种简单直接的可行方案:
Base R 实现方法
用aggregate函数时,不用list作为FUN,而是用paste并指定collapse = ", "参数,就能直接把每组的words合并成逗号分隔的字符串:
# 原始数据 df <- data.frame(first = c("a", "a", "b", "b", "b", "c"), words =c("about", "among", "blue", "but", "both", "cat")) # 分组合并 df1 <- aggregate(words ~ first, data = df, FUN = function(x) paste(x, collapse = ", "))
运行后得到的结果完全符合你的预期:
first words 1 a about, among 2 b blue, but, both 3 c cat
Tidyverse 实现方法
如果你习惯用tidyverse生态的语法,用dplyr的分组+汇总操作就能搞定:
library(dplyr) df1 <- df %>% group_by(first) %>% summarise(words = paste(words, collapse = ", "), .groups = "drop")
这里的.groups = "drop"是用来取消分组状态,返回普通的data.frame;如果需要保留分组结构,可以去掉这个参数。
补充说明你之前的问题
- 用
aggregate(..., FUN = list)得到的是列表列,因为list会把每组的元素单独存为列表,而非合并成单个字符串; group_rows()的作用是提取分组后的行集合,不是用来合并列内容的,所以达不到你的需求。
内容的提问来源于stack exchange,提问作者Zhiqiang Wang
相关产品推荐
相关产品推荐

