R语言使用dplyr分组汇总字符列为列表向量的解决方法
你需要用list()将同组的字符向量封装为列表元素,才能在summarise()返回的单行中存储多元素的字符组。
修改后的实现代码
library(dplyr) df <- data.frame(a = c("a","a","a","b","b","b"), c = c("d","d","d","d","e","e")) df.new <- df %>% group_by(a) %>% summarise(new_strs = list(c))
相关说明
- 原代码问题:你之前的写法
summarise(new_strs = c(c))会直接返回每组长度为3的字符向量,summarise()默认会把长度大于1的返回值拆分为多行,因此得到了6行的展开结果。套上list()后,每组的所有字符元素会被打包为一个列表元素,对应分组后的单行结果,完全符合你的预期输出。 - paste方案的问题:你提到的
paste(x, collapse = ",")是将所有字符元素拼接为一个长度为1的字符串,无法得到多元素的字符组,因此不符合需求。要在数据框的单个单元格中存储多元素的向量,必须使用列表类型的列。 - 后续去重优化:如果你需要直接得到分组后的唯一字符值,可以直接在汇总阶段处理,无需先合并全量元素再去重:
# 直接生成去重后的字符列表列 df.unique <- df %>% group_by(a) %>% summarise(unique_strs = list(unique(c)))
内容的提问来源于stack exchange,提问作者NPHARD
相关产品推荐
相关产品推荐

