如何在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)
输出示例:
| score | a | b | c | d |
|---|---|---|---|---|
| 0 | 2 | 4 | 3 | 4 |
| 1 | 2 | 5 | 2 | 1 |
| 2 | 6 | 1 | 5 | 5 |
方法二:基础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
相关产品推荐
相关产品推荐

