从数据框架中,是否有一种简单的方法可以同时聚合( sum
, mean
, max
et c)多个变量?
以下是一些示例数据:
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
数据框中的 x1
和 x2
变量 . 以下代码聚合 x1
变量,但是是否也可以同时聚合 x2
变量?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
任何建议将不胜感激 .
6 回答
这个
year()
函数来自哪里?您还可以使用
reshape2
包执行此任务:是的,在您的
formula
中,您可以cbind
要聚合的数字变量:请参阅
?aggregate
,formula
参数和示例 .使用
data.table
包,速度快(对于较大的数据集很有用)https://github.com/Rdatatable/data.table/wiki
使用plyr包
使用Hmisc包中的summarize()(虽然我的例子中列 Headers 很乱)
使用
dplyr
包,您可以使用summarise_all
,summarise_at
或summarise_if
函数同时聚合多个变量 . 对于示例数据集,您可以按如下方式执行此操作:后两种选择的结果:
注意:不推荐使用
summarise_each
,而选择summarise_all
,summarise_at
和summarise_if
.如my comment above中所述,您还可以使用
reshape2
-package中的recast
函数:这将给你相同的结果 .
有趣的是,这里没有展示基础R
aggregate
的data.frame
方法,above使用公式接口,所以为了完整性:More generic use of aggregate's data.frame method:
因为我们提供的是
data.frame
asx
和a
list
(data.frame
也是list
)为by
,如果我们需要以动态方式使用它,这非常有用,例如:使用其他列进行聚合和聚合非常简单还具有定制的聚合功能
例如:
迟到了,但最近又找到了另一种获取汇总统计的方法 .
library(psych) describe(data)
将输出:每个变量的平均值,最小值,最大值,标准偏差,n,标准误差,峰度,偏度,中位数和范围 .