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

如何在R中实现分组统计并将结果映射至原数据的每一行?

解决方法

你需要用**mutate()**替代summarize(),因为mutate()会保留原数据的所有行,并将分组计算的结果填充到对应组的每一行中,而不是压缩分组。

方法一:使用dplyr包(tidyverse生态)

首先构造示例数据:

# 构造原数据框
df <- data.frame(
  full_name = c("XYZ", "XYZ", "XYZ", "ABC"),
  flag = c("yes", "missing", "yes", "yes"),
  stringsAsFactors = FALSE
)

然后按分组计算并添加新列:

library(dplyr)

df_result <- df %>%
  group_by(full_name) %>%
  mutate(
    num = sum(flag == "yes"),  # 统计每组中"yes"的数量
    den = n()                  # 统计每组的总行数
  ) %>%
  ungroup()  # 取消分组(可选,根据后续操作需求)

print(df_result)

运行后输出结果:

full_name flag    num   den
  <chr>     <chr> <int> <int>
1 XYZ       yes       2     3
2 XYZ       missing   2     3
3 XYZ       yes       2     3
4 ABC       yes       1     1

方法二:使用Base R(无需额外包)

如果不想加载dplyr,可以用ave()函数实现:

# 计算每组"yes"的数量并添加到num列
df$num <- ave(df$flag == "yes", df$full_name, FUN = sum)
# 计算每组总行数并添加到den列
df$den <- ave(df$full_name, df$full_name, FUN = length)

print(df)

同样会得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:24:28