如何在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
相关产品推荐
相关产品推荐

