You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中高效获取大型数据集的频次与占比?

问题描述

需要统计数据集中各分数的频次与百分比,示例数据如下:

df <- read.table(text="  A1.1   A1.2    A1.3    A1.4    A1.5
    3   3   4   3   1
    0   4   1   2   4
    4   1   0   4   3
    1   2   3   3   3
    4   4   3   3   3
    1   3   0   1   4
    0   1   3   0   0
    1   1   0   0   1
    ", header=TRUE)

期望输出格式:

Score  Freq    Percent
    0   8   20
    1   10  25
    2   2   5
    3   12  30
    4   8   20
 Total  40  100

例如分数0出现8次,百分比为8/40*100=20。现需针对大型矩阵,提供简洁高效的R代码实现该需求。


解决方案

方法1:基础R实现(高效适配大型矩阵)

直接操作向量统计,避免冗余计算,适合处理大规模数据:

# 将数据框/矩阵转为一维向量
vec <- as.vector(as.matrix(df))

# 统计各分数频次
freq_table <- table(vec)

# 计算百分比(取整)
percent_table <- round(prop.table(freq_table) * 100)

# 转换为标准数据框
result <- data.frame(
  Score = names(freq_table),
  Freq = as.numeric(freq_table),
  Percent = as.numeric(percent_table),
  stringsAsFactors = FALSE
)

# 添加总计行
total_row <- data.frame(
  Score = "Total",
  Freq = sum(freq_table),
  Percent = 100,
  stringsAsFactors = FALSE
)

result_final <- rbind(result, total_row)

# 打印结果(隐藏行名)
print(result_final, row.names = FALSE)

方法2:tidyverse实现(简洁易读)

用管道语法简化流程,适合习惯tidy风格的场景:

library(tidyverse)

result_final <- df %>%
  # 宽表转长表,保留分数列
  pivot_longer(everything(), names_to = NULL, values_to = "Score") %>%
  # 统计各分数频次
  count(Score, name = "Freq") %>%
  # 计算百分比
  mutate(Percent = round(Freq / sum(Freq) * 100)) %>%
  # 添加总计行
  add_row(Score = "Total", Freq = sum(.$Freq), Percent = 100)

print(result_final, row.names = FALSE)

内容的提问来源于stack exchange,提问作者user330

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:45:26