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

如何批量统计多变量的1值频数与占比并生成DataFrame?

高效统计0-1变量的频数与占比方法

你的原始数据集代码:

id <- c(1001, 1002, 1003, 1004, 1005, 1006)
var1 <- c(1, 0, 1, 0, 1, 1)
var2 <- c(1, 1, 1, 1, 1, 0)
var3 <- c(0, 0, 1, 1, 1, 0)
file <- data.frame(id, var1, var2, var3)

以下两种方法可批量处理任意数量的0-1变量,无需手动逐个统计:

方法一:用tidyverse工具包(简洁易读,推荐)

先安装并加载tidyverse,通过数据转置+分组统计完成需求:

library(tidyverse)

result <- file %>%
  # 排除id列,将宽格式数据转为长格式
  pivot_longer(cols = -id, names_to = "variable", values_to = "response") %>%
  # 只保留值为1的记录
  filter(response == 1) %>%
  # 按变量和响应值分组统计频数
  group_by(variable, response) %>%
  summarise(count = n(), .groups = "drop") %>%
  # 计算占比并保留两位小数
  mutate(percent = round(count / nrow(file) * 100, 2))

print(result)

输出结果:

# A tibble: 3 × 4
  variable response count percent
  <chr>       <dbl> <int>   <dbl>
1 var1            1     4    66.7
2 var2            1     5    83.3
3 var3            1     3    50  

方法二:基础R实现(无需额外安装包)

通过遍历变量列,批量计算后合并结果:

# 提取所有非id的变量列名
target_vars <- setdiff(names(file), "id")

# 遍历每个变量,统计1的频数与占比
stats_result <- lapply(target_vars, function(var_name) {
  count_1 <- sum(file[[var_name]] == 1)
  percent_1 <- round(count_1 / nrow(file) * 100, 2)
  data.frame(variable = var_name, response = 1, count = count_1, percent = percent_1)
})

# 将列表合并为最终DataFrame
final_result <- do.call(rbind, stats_result)

print(final_result)

输出结果:

variable response count percent
1     var1        1     4    66.67
2     var2        1     5    83.33
3     var3        1     3    50.00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 12:01:02