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

R语言入门求助:如何统计数据框每列各值的出现次数?

统计数据框每列各值出现次数的方法

首先构造你提供的示例数据,方便测试:

my.data <- data.frame(
  Column_A = c("YES", "YES", "NO", "YES", "NO"),
  Column_B = c("NO", "MAYBE", "NO", "NO", "NO"),
  Column_C = c("NO", "MAYBE", "YES", "YES", "YES"),
  stringsAsFactors = FALSE
)

你用table(my.data)报错是因为这个函数默认生成列间交叉频数表,当列的取值组合过多时会导致计算量爆炸,而你需要的是每列单独的频次统计,所以要按列处理。

方法一:基础R实现(无需额外包)

# 遍历每一列计算频次
freq_list <- lapply(my.data, table)

# 统一所有列的取值水平,缺失值补0
all_levels <- c("YES", "MAYBE", "NO")
result_df <- do.call(cbind, lapply(freq_list, function(x) {
  as.integer(ifelse(is.na(x[all_levels]), 0, x[all_levels]))
}))

# 设置行名
rownames(result_df) <- all_levels

运行后result_df就是你想要的结果:

Column_A Column_B Column_C
YES           3        0        3
MAYBE         0        1        1
NO            2        4        1

方法二:tidyverse工具链实现(更易读)

如果你习惯用tidyverse的语法,可结合dplyr和tidyr:

library(dplyr)
library(tidyr)

result_df <- my.data %>%
  # 宽格式转长格式,统一统计频次
  pivot_longer(everything(), names_to = "Column", values_to = "Value") %>%
  # 按列和取值统计次数
  count(Column, Value) %>%
  # 转回宽格式,缺失频次补0
  pivot_wider(names_from = Column, values_from = n, values_fill = 0) %>%
  # 按指定顺序排序行
  arrange(factor(Value, levels = c("YES", "MAYBE", "NO")))

# 可选:将Value列转为行名
rownames(result_df) <- result_df$Value
result_df <- result_df %>% select(-Value)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:48