如何统计数据框中指定列出现频率最高的前N个元素
实现方案
下面提供两种常用的实现路径,均可直接适配上万条数据的TopN统计需求:
tidyverse 实现(适配后续ggplot2可视化场景)
你已经在后续规划使用ggplot2,推荐用tidyverse生态的dplyr完成统计,代码逻辑清晰易维护:
library(dplyr) # 统计Top3客户频次,如需Top10直接将slice参数改为1:10即可 top_customer <- df %>% count(CustomerID, name = "Times") %>% arrange(desc(Times)) %>% slice(1:3)
输出的tibble格式结果和你要求的结构完全一致,可直接传入ggplot2的绘图函数。
原生R实现(无需加载第三方包)
如果不想依赖第三方包,可以用base R的基础函数完成:
# 生成频次表并按降序排序 freq <- sort(table(df$CustomerID), decreasing = TRUE) # 转为数据框并修改列名 top_customer <- head(as.data.frame(freq), 3) colnames(top_customer) <- c("CustomerID", "Times")
内容的提问来源于stack exchange,提问作者user14205458
相关产品推荐
相关产品推荐

