如何按频率聚合字符串列?R语言DataFrame分组统计频次问题
错误原因说明
你此前的aggregate(df1$x ~ df1$y, df1, FUN = sum)代码不符合需求有两个核心原因:
- 仅按y列分组,没有同时按x、y两列联合分组
- 使用
sum函数会对x列的数值做求和运算,而你需要的是每个分组的行数统计,应该用计数相关的函数
解决方案
方法1:基础R使用aggregate实现
# 写法1:指定双分组变量,用length统计每组行数 aggregate(. ~ x + y, df1, FUN = length) # 如需固定输出列名,可调整为: setNames(aggregate(. ~ x + y, df1, FUN = length), c("x", "y", "Frequency"))
方法2:基础R使用table实现
你提到的table函数可以直接实现需求,转成data.frame即可:
as.data.frame(table(df1, dnn = c("x", "y")), responseName = "Frequency")
方法3:dplyr包实现(语法更直观,推荐)
# 加载dplyr包 library(dplyr) # 简洁写法,直接对多列计数 df1 %>% count(x, y, name = "Frequency") # 逻辑更清晰的分组汇总写法 df1 %>% group_by(x, y) %>% summarise(Frequency = n(), .groups = "drop")
如果需要和你给出的示例结果顺序一致,可在上述代码后补充排序逻辑,比如dplyr写法后加%>% arrange(x, desc(y))即可。
内容的提问来源于stack exchange,提问作者NewRProgrammer
相关产品推荐
相关产品推荐

