You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言中按分组计算DataFrame列中空单元格的占比并生成新DataFrame

解决分组空单元格占比计算问题

嘿,我来帮你修正代码~你当前的问题主要是在dplyrsummarise步骤里用错了函数,另外要注意你的数据中空值是**空字符串""**而非标准的NA,判断逻辑得对应上。

先理清楚需求:每个人对应3条记录,我们要统计每组里空字符串的数量,再除以组内总条数得到空单元格占比。

正确的dplyr实现代码

library(dplyr)

# 你的原始数据集
df <- data.frame(
  name = c("Jon", "Bill", "Maria", "Ben", "Emma", "Jon", "Bill", "Maria", "Ben", "Emma", "Jon", "Bill", "Maria", "Ben", "Emma"),
  data = c(1, "", 3, 1, "",3, 4, "", 1, "", 1, 3, 3, 1, 3)
)

# 计算空单元格占比并生成结果集
df_result <- df %>%
  group_by(name) %>%
  summarise(
    # 统计分组内空字符串的数量
    miss_count = sum(data == ""),
    # 计算空值占比:空值数量 / 分组总记录数
    percentage = round(miss_count / n(), 2)
  ) %>%
  # 按姓名排序,和你期望的结果顺序一致
  arrange(name) %>%
  # 仅保留需要的列
  select(name, percentage)

# 查看最终结果
df_result

代码细节解释

  • sum(data == ""):因为你的空值是""而非NA,所以用这个逻辑统计每组内空单元格的数量,不能用is.na()判断。
  • n():获取当前分组的总记录数,这个写法更通用——哪怕后续分组的记录数不一致,也能正确计算占比。
  • round(..., 2):将占比保留两位小数,和你给出的期望结果完全匹配。

运行后得到的结果和你预期的df_result完全一致:

# A tibble: 5 × 2
  name  percentage
  <chr>      <dbl>
1 Ben         0   
2 Bill        0.33
3 Emma        0.67
4 Jon         0   
5 Maria       0.33

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

火山引擎 最新活动