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

使用dplyr的pivot与count组合实现因子变量频次统计

问题:生成因子变量的类别计数统计表格

我有一个数据集,所有列均为具有相同水平的factor类型,行代表观测值。需要生成以因子变量为行、答案类别计数为列的统计表格。

示例数据集

rating <- c("yes", "no", "totally")
coke<-factor(c('yes', "yes", NA, "no"), levels=rating)
icecream<-factor(c("yes", "no", "totally", "no"),levels=rating)
cookie<-factor(c("no", NA, "no","yes"),levels=rating) 
df<-tibble(coke,icecream,cookie)

数据集预览:

# A tibble: 4 × 3
  coke  icecream cookie
  <fct> <fct>    <fct> 
1 yes   yes      no    
2 yes   no       NA    
3 NA    totally  no    
4 no    no       yes  

期望输出

mat<-matrix(c(2,1,0,1,1,2,1,0,1,1,0,1),byrow=T, 3,4, dimnames=list(c("coke","icecream","cookie"), c("yes","no","totally",NA)))
mat

输出结果:

yes no totally <NA>
coke       2  1       0    1
icecream   1  2       1    0
cookie     1  1       0    1

当前实现方式

目前只能逐个变量统计,代码如下:

df %>% 
  count(coke)%>% 
  pivot_wider(names_from = coke, values_from = n) 

批量实现方案

方法1:使用tidyverse工具链

通过宽表转长、统一计数再转回宽表的方式,批量处理所有变量:

library(tidyverse)

df %>%
  # 将所有列转为长格式,区分变量名和响应值
  pivot_longer(everything(), names_to = "variable", values_to = "response") %>%
  # 按变量和响应值统计次数
  count(variable, response) %>%
  # 转回宽格式,缺失的计数用0填充
  pivot_wider(names_from = response, values_from = n, values_fill = 0)

方法2:使用基础R实现

利用sapply遍历所有列,结合table统计类别(包含NA),最后转置结果:

# 遍历每列生成计数表,包含NA的统计
result_matrix <- sapply(df, function(col) table(col, useNA = "always"))
# 转置矩阵,让变量作为行
t(result_matrix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:52:36