在R中不使用dplyr为大型宽数据集添加频数列
解决方案:高效合并重复观测并统计频次
针对大型宽格式分类数据集,以下两种方案无需指定变量名、不依赖table()函数,能高效完成重复行合并并添加频次列:
使用dplyr包(tidyverse生态)
利用across(everything())自动选中所有列作为分组依据,通过分组合并统计频次,内存友好:
library(dplyr) # 按所有变量分组,统计每组出现次数 data_freq <- data %>% group_by(across(everything())) %>% summarize(Freq = n(), .groups = "drop")
across(everything()):自动识别所有列作为分组键,适配任意数量的分类变量n():统计每组内的观测行数即频次.groups = "drop":完成统计后取消分组结构,返回常规数据框
使用data.table包(大数据最优选择)
data.table的分组运算效率远高于基础R,适合百万级以上的大型数据集:
library(data.table) # 转换为data.table格式(若原数据是data.frame) setDT(data) # 按所有列分组,计算频次 data_freq <- data[, .(Freq = .N), by = names(data)]
.N:data.table内置变量,直接返回每组的观测数量by = names(data):自动以所有列作为分组依据,无需手动列变量名
这两种方法均避免了table()生成多维交叉表的内存爆炸问题,完全适配任意数量的分类变量。
内容的提问来源于stack exchange,提问作者Bibi
相关产品推荐
相关产品推荐

