如何在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
相关产品推荐
相关产品推荐

