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

如何在R语言中按规则对数据分组求和并计算占比?

R数据分组求和与占比计算

数据示例

首先加载示例数据:

M <- read.table(text="group    value   blue
    B   12  Y
    C   14  Y
    A   12  Y
    B   12  N
    C   10  Y
    A   7   Y
    B   6   Y", header=TRUE)

方法一:使用dplyr包(tidyverse风格)

先安装并加载dplyr包(首次使用时运行安装代码),按步骤处理:

# 首次使用安装包
# install.packages("dplyr")
library(dplyr)

# 计算每个group的总value求和
total_sum <- M %>% 
  group_by(group) %>% 
  summarise(total_value = sum(value))

# 计算每个group中blue为"Y"的value求和
y_sum <- M %>% 
  filter(blue == "Y") %>% 
  group_by(group) %>% 
  summarise(y_value = sum(value))

# 合并结果并计算P值(保留整数)
result <- total_sum %>% 
  left_join(y_sum, by = "group") %>% 
  mutate(
    value = y_value,
    P = round((y_value / total_value) * 100, 0)
  ) %>% 
  select(group, value, P)

# 输出结果
result

运行后得到预期结果:

# A tibble: 3 × 3
  group value     P
  <chr> <int> <dbl>
1 A        19   100
2 B        30    60
3 C        24   100

方法二:使用基础R的aggregate函数

无需额外安装包,用基础R实现:

# 计算每个group的总value求和
total_sum <- aggregate(value ~ group, data = M, sum)
colnames(total_sum)[2] <- "total_value"

# 计算每个group中blue为"Y"的value求和
y_sum <- aggregate(value ~ group, data = M[M$blue == "Y", ], sum)
colnames(y_sum)[2] <- "y_value"

# 合并结果并计算P值(保留整数)
result <- merge(total_sum, y_sum, by = "group")
result$value <- result$y_value
result$P <- round((result$y_value / result$total_value) * 100, 0)
result <- result[, c("group", "value", "P")]

# 输出结果
result

输出结果:

group value   P
1     A    19 100
2     B    30  60
3     C    24 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:17:12