如何简化2015-2022年度求和代码,快速生成汇总DataFrame?
批量计算年度总值并生成DataFrame
想要创建一个展示2015-2022各年度总值的新DataFrame,请问是否无需为每个年份创建Sum变量再组合向量,就能实现该需求?
当前实现代码:
Sum15 = mydata %>% filter(Date==2015) %>% summarise(Value = sum(Value)) Sum16 = mydata %>% filter(Date==2016) %>% summarise(Value = sum(Value)) Sum17 = mydata %>% filter(Date==2017) %>% summarise(Value = sum(Value)) # ……(剩余年份的重复代码)
Year = c("2015","2016","2017","2018","2019","2020","2021","2022") Value = c(Sum15$Value, Sum16$Value, Sum17$Value, Sum18$Value, Sum19$Value, Sum20$Value, Sum21$Value, Sum22$Value) YearSum = data.frame(Year,Value)
简化实现方法:
完全可以不用逐个创建Sum变量,用dplyr的分组聚合功能就能一步完成,代码简洁且易维护:
YearSum = mydata %>% # 按年份分组 group_by(Date) %>% # 计算每组的总值,na.rm=TRUE用于忽略缺失值(可选) summarise(Value = sum(Value, na.rm = TRUE)) %>% # 取消分组(可选,避免后续操作受分组影响) ungroup() %>% # 筛选2015-2022的年份 filter(Date %in% 2015:2022) %>% # 把列名Date改为Year(如果需要和原代码输出列名一致的话) rename(Year = Date)
如果你的Date列是字符类型,只需把筛选条件改成Date %in% as.character(2015:2022)即可。
这种方式不需要手动创建每个年份的Sum变量,也不用手动拼接向量,直接通过分组求和+筛选就能得到目标DataFrame,后续年份变动时只需要调整筛选范围即可。
内容的提问来源于stack exchange,提问作者Peter McGregor
相关产品推荐
相关产品推荐

