首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >每组汇总/汇总多个变量(例如sum、mean)

每组汇总/汇总多个变量(例如sum、mean)
EN

Stack Overflow用户
提问于 2012-03-15 23:44:55
回答 4查看 206.5K关注 0票数 172

从数据帧中,有没有一种简单的方法来同时聚合(summeanmax等c)多个变量?

以下是一些示例数据:

代码语言:javascript
复制
library(lubridate)
days = 365*2
date = seq(as.Date("2000-01-01"), length = days, by = "day")
year = year(date)
month = month(date)
x1 = cumsum(rnorm(days, 0.05)) 
x2 = cumsum(rnorm(days, 0.05))
df1 = data.frame(date, year, month, x1, x2)

我想按年和月同时聚合来自df2数据框的x1x2变量。下面的代码聚合了x1变量,但是同时聚合x2变量也是可能的吗?

代码语言:javascript
复制
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-15 23:56:54

这个year()函数来自哪里?

您还可以使用reshape2包来执行此任务:

代码语言:javascript
复制
require(reshape2)
df_melt <- melt(df1, id = c("date", "year", "month"))
dcast(df_melt, year + month ~ variable, sum)
#  year month         x1           x2
1  2000     1  -80.83405 -224.9540159
2  2000     2 -223.76331 -288.2418017
3  2000     3 -188.83930 -481.5601913
4  2000     4 -197.47797 -473.7137420
5  2000     5 -259.07928 -372.4563522
票数 47
EN

Stack Overflow用户

发布于 2012-03-16 07:00:08

使用data.table包,该包速度很快(适用于较大的数据集)

https://github.com/Rdatatable/data.table/wiki

代码语言:javascript
复制
library(data.table)
df2 <- setDT(df1)[, lapply(.SD, sum), by=.(year, month), .SDcols=c("x1","x2")]
setDF(df2) # convert back to dataframe

使用plyr包

代码语言:javascript
复制
require(plyr)
df2 <- ddply(df1, c("year", "month"), function(x) colSums(x[c("x1", "x2")]))

使用Hmisc包中的summarize() (尽管在我的示例中列标题很乱)

代码语言:javascript
复制
# need to detach plyr because plyr and Hmisc both have a summarize()
detach(package:plyr)
require(Hmisc)
df2 <- with(df1, summarize( cbind(x1, x2), by=llist(year, month), FUN=colSums))
票数 53
EN

Stack Overflow用户

发布于 2020-01-06 05:37:58

使用dplyr版本的>= 1.0.0,我们还可以使用summarise通过across对多个列应用函数

代码语言:javascript
复制
library(dplyr)
df1 %>% 
    group_by(year, month) %>%
    summarise(across(starts_with('x'), sum))
# A tibble: 24 x 4
# Groups:   year [2]
#    year month     x1     x2
#   <dbl> <dbl>  <dbl>  <dbl>
# 1  2000     1   11.7  52.9 
# 2  2000     2  -74.1 126.  
# 3  2000     3 -132.  149.  
# 4  2000     4 -130.    4.12
# 5  2000     5  -91.6 -55.9 
# 6  2000     6  179.   73.7 
# 7  2000     7   95.0 409.  
# 8  2000     8  255.  283.  
# 9  2000     9  489.  331.  
#10  2000    10  719.  305.  
# … with 14 more rows
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9723208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档