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

如何在R中按range分组计算数据框各var列的零值占比

按Range分组计算多变量零值占比及绘图方案

问题分析

你原代码的核心问题:

  • 循环中每次覆盖df_new,最终仅保留最后一列的计算结果
  • 错误使用names(df[,i])获取列值,实际上names()返回的是列名(如"var1"),而非列的数值数据
  • 分母计算错误,sum(names(df[,i]))是对列名字符串求和(无意义),应统计每组内非NA观测总数

推荐解决方案:Tidyverse长格式处理(更适合后续绘图)

用tidyr将宽格式转长格式,再分组计算,这种方式更简洁,且直接适配ggplot绘图需求。

步骤1:加载依赖包

library(tidyverse)

步骤2:转换为长格式

把多个var列合并为「变量名」和「数值」两列,方便统一处理:

df_long <- df %>%
  select(-id) %>%  # 移除不需要的id列
  pivot_longer(
    cols = starts_with("var"),  # 选择所有var开头的列
    names_to = "variable",      # 新列:变量名(如var1)
    values_to = "value"         # 新列:对应数值
  )

步骤3:分组计算零值占比

按range和variable分组,计算每组零值数量占非NA观测数的比例:

zero_prop <- df_long %>%
  group_by(range, variable) %>%
  summarise(
    prop_zero = sum(value == 0, na.rm = TRUE) / sum(!is.na(value)),
    .groups = "drop"  # 计算后取消分组
  )

# 查看结果
print(zero_prop)

步骤4:绘制趋势图

直接用长格式结果绘图,轻松展示所有变量的趋势:

ggplot(zero_prop, aes(x = range, y = prop_zero, color = variable, group = variable)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) +
  labs(
    x = "Range",
    y = "零值占比",
    title = "各变量零值占比随Range变化趋势"
  ) +
  theme_minimal()

备选方案:宽格式直接计算(保留原数据结构)

如果需要在原数据框中添加各变量的零值占比列,用dplyr::across批量处理,无需循环:

df_wide <- df %>%
  group_by(range) %>%
  mutate(
    across(
      starts_with("var"),  # 批量处理var列
      ~ sum(.x == 0, na.rm = TRUE) / sum(!is.na(.x)),  # 计算零值占比
      .names = "prop_zero_{.col}"  # 新列命名规则:prop_zero_var1
    )
  ) %>%
  ungroup()

# 查看添加的占比列
print(df_wide %>% select(range, starts_with("prop_zero")))

如果你一定要用循环(不推荐)

若坚持用循环实现,需注意动态列引用和结果合并:

# 初始化结果数据框
result <- data.frame(range = unique(df$range))

for(i in 3:ncol(df)){
  var_name <- colnames(df)[i]
  # 计算当前列的零值占比
  temp <- df %>%
    group_by(range) %>%
    summarise(
      !!paste0("prop_zero_", var_name) := sum(.data[[var_name]] == 0, na.rm = TRUE) / sum(!is.na(.data[[var_name]]))
    )
  # 合并到结果
  result <- result %>% left_join(temp, by = "range")
}

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:24:35