在R中创建比例表时遇错误:尝试创建含≥2^31元素的表
解决
table()生成超大表的报错问题 错误原因
你直接将20个各含5个水平的分类变量传入table(),函数会尝试生成一个20维的列联表,总元素数为5^20——这个数值远远超过了R允许的2^31元素上限,因此触发报错。
解决方法
不需要一次性处理所有变量,而是针对每个区域变量单独计算频率和比例,或者转成数据长格式后分组统计,以下是两种可行方案:
方案1:用列表逐个处理变量
通过lapply遍历数据集的每一列,对每个区域变量单独计算频率和比例,结果会以列表形式存储,方便查看单个变量的统计结果:
# 遍历所有区域变量,计算每个变量的频率与比例 stat_results <- lapply(st2.affect, function(col) { freq_table <- table(col) prop_table <- proportions(freq_table) # 整理成数据框,方便阅读 data.frame( 情感标签 = names(freq_table), 频率 = as.integer(freq_table), 比例 = round(prop_table, 4) ) }) # 查看area1_affect的统计结果 stat_results$area1_affect
方案2:转成长格式后分组统计
如果需要把所有区域的统计结果整合到一个表格里,可以用tidyr将宽格式数据转成长格式,再用dplyr分组计算:
library(dplyr) library(tidyr) # 将宽格式数据转为长格式 long_format_data <- st2.affect %>% pivot_longer( cols = everything(), names_to = "区域", values_to = "情感标签" ) # 按区域分组,计算每个情感标签的频率和比例 summary_table <- long_format_data %>% group_by(区域, 情感标签) %>% summarise(频率 = n(), .groups = "drop") %>% group_by(区域) %>% mutate(比例 = round(频率 / sum(频率), 4)) # 查看整合后的统计表格 print(summary_table)
这两种方法都避开了生成超大多维表的问题,能高效得到每个区域变量下各情感标签的频率和比例。
内容的提问来源于stack exchange,提问作者Ola
相关产品推荐
相关产品推荐

