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

如何在R中计算各列哑变量(Yes/No)的取值百分比

R语言计算数据框每列Yes/No取值占比的方案

以下两种方案均支持批量处理数百列的场景,你可以根据自己的使用习惯选择:

方案1:基础R实现(无需安装额外依赖)

直接用apply遍历所有列,结合table和prop.table计算占比即可:

VAR01 <- c('Yes', 'No', 'Yes', 'Yes', 'No', 'No')
VAR02 <- c('No', 'No', 'Yes', 'No', 'No', 'Yes')
VAR03 <- c('Yes', 'Yes', 'No', 'Yes', 'No', 'Yes')
data <- data.frame(VAR01, VAR02, VAR03)

# 按列遍历计算占比
col_ratio <- apply(data, 2, function(col) {
  prop.table(table(col))
})

# 转置为易读的数据框格式,行对应原数据列,列对应Yes/No占比
col_ratio_df <- as.data.frame(t(col_ratio))
print(col_ratio_df)

运行后输出结果示例:

No       Yes
VAR01 0.5000000 0.5000000
VAR02 0.6666667 0.3333333
VAR03 0.3333333 0.6666667

方案2:tidyverse实现(灵活性更高,适合后续分析)

如果你习惯用tidyverse生态的工具,用across可以更灵活的选择需要计算的列:

library(dplyr)
library(tidyr)

col_ratio_df <- data %>%
  # 这里的everything()可以替换为starts_with("VAR")等匹配规则,筛选需要处理的列
  summarise(across(everything(), ~prop.table(table(.x)))) %>%
  pivot_longer(everything(), names_to = "变量名", values_to = "占比") %>%
  # 新增取值列标识是Yes还是No的占比
  mutate(取值 = names(占比), .after = 变量名)

print(col_ratio_df)

如果需要输出百分比格式,把prop.table(table(.x))替换为scales::percent(prop.table(table(.x)))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:36:04