R语言中汇总数据框行失败,求实现含分组合计的目标输出
问题分析与解决
原代码存在的问题
- 使用
summarise时直接保留Den和Num列:summarise的核心是按组聚合为单行,原代码中每个ID组内有多行(比如ID=A有2行),这样直接赋值会触发dplyr报错,无法保留原数据的所有行。 - 未生成
Type=ALL的汇总行:原代码没有处理每个ID的总和统计需求,无法得到你想要的汇总行数据。 - 未区分单行比值与汇总行比值:原代码只计算了单行的
Num/Den,但汇总行需要的是Num总和/Den总和,二者逻辑不同。
正确实现代码
library(tidyverse) # 加载数据 Data = read.table(header=T, text="\nID Type Num Den\nA 1 2 3\nA 2 5 6\nB 1 1 7") # 处理原数据,先计算每行的比值 original_data <- Data %>% mutate(Num_devidedby_Den = Num / Den) # 生成每个ID的汇总行 summary_data <- Data %>% group_by(ID) %>% summarise( Type = "ALL", Num = sum(Num), Den = sum(Den), Num_devidedby_Den = sum(Num) / sum(Den), .groups = "drop" ) # 合并原数据与汇总行,并按ID排序 Desired_output <- bind_rows(original_data, summary_data) %>% arrange(ID, Type) # 查看结果 print(Desired_output)
结果说明
- 原数据的每行都会保留,同时计算对应的
Num/Den比值。 - 每个ID新增
Type=ALL的汇总行,其中Num为该ID所有行的Num总和,Den为总和,Num_devidedby_Den为总和的比值。 - 最终结果按
ID和Type排序,和你想要的输出结构一致。
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

