如何使用dplyr高效为数据框添加汇总行?
如何使用dplyr高效为数据框添加汇总行?
我懂你想要的效果啦——给现有的HAVE数据框追加一行汇总记录,STUDENT列显示ALL,SCORE1和TEST列分别计算整列的总和,YEAR列留空为NA对吧?用dplyr来实现其实非常简洁,我给你一步步拆解:
首先先确认你的原始数据(我帮你整理成更规范的代码格式了):
HAVE <- data.frame( STUDENT = c(1,2,3,4), YEAR = c(2020,2020,2021,2020), SCORE1 = c(5,9,8,0), TEST = c(7,11,3,9) )
接下来就是dplyr的解决方案,一行代码搞定绑定+汇总:
library(dplyr) WANT <- HAVE %>% bind_rows( summarize(., STUDENT = "ALL", YEAR = NA, SCORE1 = sum(SCORE1, na.rm = TRUE), TEST = sum(TEST, na.rm = TRUE) ) )
给你解释下这段代码的逻辑:
- 用
%>%管道符把HAVE数据框传给bind_rows函数,它能轻松把原数据和我们生成的汇总行合并在一起 summarize(., ...)里的.代表前面传过来的HAVE数据,这样直接就能引用列名计算总和,不用重复写数据框名- 加
na.rm = TRUE是个实用小细节,万一你的数据里有缺失值,求和也不会出错 - 最后指定
STUDENT为"ALL",YEAR为NA,完全匹配你想要的WANT结构
对了,顺带提一句:你之前写的rowbind是拼写错误哦,正确的基础R函数是rbind,不过用dplyr的方法更贴合tidyverse的风格,而且以后如果要扩展需求(比如按YEAR分组做汇总),修改起来也更方便~
运行完上面的代码,你就能得到想要的结果:
> WANT STUDENT YEAR SCORE1 TEST 1 1 2020 5 7 2 2 2020 9 11 3 3 2021 8 3 4 4 2020 0 9 5 ALL NA 22 30
备注:内容来源于stack exchange,提问作者bvowe
相关产品推荐
相关产品推荐

