如何在R中按Group统计Distance频次并为数据框新增频次列
在R中按分组统计值的出现频次并新增列的最优方法
针对你的需求——给数据集新增一列,展示每个Distance值在对应Group中的出现频次,以下是两种高效且常用的实现方法:
方法一:使用dplyr(tidyverse生态,语法直观)
dplyr是R中处理数据的常用工具包,语法简洁易读,适合常规数据分析场景:
- 先安装并加载dplyr包(未安装则运行
install.packages("dplyr")) - 用
add_count()函数一步完成分组统计并新增列:
library(dplyr) # 模拟你的数据集结构 df <- data.frame( Group = c("A", "A", "A", "B", "B", "B", "B"), Distance = c(10, 10, 20, 10, 20, 20, 20) ) # 新增Count列,统计每个Group内Distance的出现次数 df <- df %>% add_count(Group, Distance, name = "Count")
也可以用group_by()+mutate()的组合,逻辑更直白:
df <- df %>% group_by(Group, Distance) %>% mutate(Count = n()) %>% ungroup()
方法二:使用data.table(大数据场景最优)
如果你的数据集规模较大,data.table在运行速度和内存利用率上的优势更明显:
- 安装并加载data.table包(未安装则运行
install.packages("data.table")) - 转换数据格式后按分组统计:
library(data.table) # 转换为data.table格式 dt <- as.data.table(df) # 新增Count列 dt[, Count := .N, by = .(Group, Distance)] # 如需转回data.frame格式 df_result <- as.data.frame(dt)
两种方法最终都会生成你需要的结果:每行的Count值,就是该行Distance在所属Group中的出现次数。
内容的提问来源于stack exchange,提问作者timeywimey
相关产品推荐
相关产品推荐

