从数据帧,是否有聚集(一个简单的方法sum,mean,max同时等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)
Run Code Online (Sandbox Code Playgroud)
我想同时按年和月汇总数据框中的变量x1和x2变量df2.以下代码聚合x1变量,但是是否也可以同时聚合x2变量?
### aggregate variables by year month
df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE)
head(df2)
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激.
dplyr非常快,但我想知道我是否遗漏了一些东西:是否有可能总结出几个变量.例如:
library(dplyr)
library(reshape2)
(df=dput(structure(list(sex = structure(c(1L, 1L, 2L, 2L), .Label = c("boy",
"girl"), class = "factor"), age = c(52L, 58L, 40L, 62L), bmi = c(25L,
23L, 30L, 26L), chol = c(187L, 220L, 190L, 204L)), .Names = c("sex",
"age", "bmi", "chol"), row.names = c(NA, -4L), class = "data.frame")))
sex age bmi chol
1 boy 52 25 187
2 boy 58 23 220
3 girl 40 30 190
4 girl 62 26 204
dg=group_by(df,sex)
Run Code Online (Sandbox Code Playgroud)
使用这个小型数据帧,它很容易编写
summarise(dg,mean(age),mean(bmi),mean(chol))
Run Code Online (Sandbox Code Playgroud)
而且我知道,为了得到我想要的东西,我可以融化,获得手段,然后如dcast
dm=melt(df, id.var='sex')
dmg=group_by(dm, sex, variable); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用data.table来加速处理由几个较小的合并data.frames组成的大型data.frame(300k x 60).我是data.table的新手.到目前为止的代码如下
library(data.table)
a = data.table(index=1:5,a=rnorm(5,10),b=rnorm(5,10),z=rnorm(5,10))
b = data.table(index=6:10,a=rnorm(5,10),b=rnorm(5,10),c=rnorm(5,10),d=rnorm(5,10))
dt = merge(a,b,by=intersect(names(a),names(b)),all=T)
dt$category = sample(letters[1:3],10,replace=T)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有比以下更有效的方法来总结数据.
summ = dt[i=T,j=list(a=sum(a,na.rm=T),b=sum(b,na.rm=T),c=sum(c,na.rm=T),
d=sum(d,na.rm=T),z=sum(z,na.rm=T)),by=category]
Run Code Online (Sandbox Code Playgroud)
我真的不想手工输入所有50列计算,而且eval(paste(...))似乎很笨拙.
我看了下面的例子,但对我的需求似乎有点复杂.谢谢
我有一个数据集 df,看起来像这样,但有几百万个实例:
Date AD Runway MTOW nr.flights
2008-01-01 A 18 376 2
2008-01-01 A 18 376 2
2008-01-01 D 36 190 1
2008-01-02 D 09 150 2
2008-01-02 A 36 280 1
2008-01-02 A 36 280 1
我希望它看起来像这样:
Date AD Runway MTOW nr.flights
2008-01-01 A 18 752 4
2008-01-01 D 36 190 2
2008-01-02 D 9 150 2
2008-01-02 A 36 560 1
基本上我想将所有相同的 Date、AD 和 Runway 行组合在一起,因此删除所有重复项。同时,我希望针对特定日期、AD 和跑道汇总 MTOW 和 nr.flights。
我试过这个:
vals <- expand.grid(Date = unique(df$Date),
Runway = …
我正在尝试编写一个函数,它将根据前两列中的值对数据帧中的列求和.例如,我有一个矩阵M,
Crs gr P_7 P_8
38 1 3 16
38 1 12 45
38 1 9 28
40 2 3 9
40 2 14 29
40 1 4 3
40 2 8 2
Run Code Online (Sandbox Code Playgroud)
我想首先根据column1(crs)和column2(gr)对列进行求和.结果将是,
Crs gr P_7 P_8
38 1 24 89
40 2 25 40
40 1 4 3
Run Code Online (Sandbox Code Playgroud)
目前我正在使用,
M <- M[, list(sum(P_7),sum(P_8)), by=list(Crs,gr)]
Run Code Online (Sandbox Code Playgroud)
但问题是,我必须定义不修复的列的名称.所以,我想知道如何在不定义列名的情况下这样做.提前致谢!