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

如何在R语言中统计多列数据中0-2的出现次数

统计数据框多列中0、1、2的出现次数

需求说明

需要统计数据框多列里0、1、2各自的出现次数,示例数据如下:

library(tibble)
df <- tibble(
  a = sample(0:2, 10, replace=T), 
  b = sample(0:2, 10, replace=T), 
  c = sample(0:2, 10, replace=T), 
  d = sample(0:2, 10, replace=T), 
)

期望输出格式为以score为行标识,各列为原数据框列名的计数表格。


方法一:tidyverse风格实现(dplyr + tidyr)

通过转换数据格式统一处理计数,代码简洁直观:

library(dplyr)
library(tidyr)

count_result <- df %>%
  # 将宽格式转为长格式,统一处理所有列
  pivot_longer(everything(), names_to = "column", values_to = "score") %>%
  # 按列和分数统计出现次数
  count(column, score) %>%
  # 转回宽格式,缺失计数填充为0
  pivot_wider(names_from = "column", values_from = "n", values_fill = 0) %>%
  # 按分数排序
  arrange(score)

print(count_result)

输出示例:

scoreabcd
02434
12521
26155

方法二:基础R实现

无需加载额外包,直接用原生函数完成统计:

# 对每一列统计0、1、2的次数,确保包含所有目标值
count_matrix <- sapply(df, function(col) {
  table(factor(col, levels = 0:2))
})

# 转换为数据框并调整列顺序
count_result <- as.data.frame(count_matrix)
count_result$score <- rownames(count_result)
count_result <- count_result[, c("score", names(df))]
rownames(count_result) <- NULL

print(count_result)

输出结果与方法一完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:15:34