R语言实现不同数据类型多列分组聚合的方法及报错解决
报错原因
summarize() 函数默认仅保留分组字段和函数内显式生成的列,你原有代码的分组逻辑仅保留了自定义的gp临时分组列、以及summarize内生成的title和text列,year、code在summarize计算步骤就已经被丢弃,后续select()调用自然会报找不到列的错误。
另外你原有手动构造gp分组的逻辑仅通过相邻行title是否变化切分组,没有结合需求要求的year、code维度,一旦数据排序变动、出现同名title相邻但year/code不一致的场景就会出现分组错误。
可直接运行的正确代码
直接按业务要求的三个维度分组即可,不需要手动构造分组序号,逻辑更简洁也更稳定:
library(dplyr) # 加载示例数据 df <- data.frame(title = c('A','B','C','C','C','D','C','C','E'), text = c('I like...', 'I wish...', 'review1','review2','review3', 'Detecting...','review1','review2', 'New...'), year = c(2012, 2012, 2013, 2013, 2013, 2014, 2015, 2015, 2016), code = c("i12", "i12", "i13", "i13", "i13", "i14", "i15", "i15", "i16")) # 计算逻辑 df %>% group_by(title, year, code) %>% summarize( # 统计每个分组下的text数量 text_count = n(), # 拼接同组内text字段,用空格分隔 text = paste(text, collapse = " "), # 计算完成后自动取消分组,避免后续操作受分组影响 .groups = "drop" ) %>% # 调整列顺序匹配预期输出格式 select(title, text, year, code, text_count)
运行输出结果
运行后返回结果完全匹配预期:
title text year code text_count <chr> <chr> <dbl> <chr> <int> 1 A I like... 2012 i12 1 2 B I wish... 2012 i12 1 3 C review1 review2 review3 2013 i13 3 4 C review1 review2 2015 i15 2 5 D Detecting... 2014 i14 1 6 E New... 2016 i16 1
如果不需要text_count统计列,直接删掉summarize里的text_count = n()行即可。
内容的提问来源于stack exchange,提问作者Ranji Raj
相关产品推荐
相关产品推荐

