相关疑难解决方法(0)

汇总/汇总每组的多个变量(例如总和,平均值)

从数据帧,是否有聚集(一个简单的方法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)

我想同时按年和月汇总数据框中的变量x1x2变量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)

任何建议将不胜感激.

aggregate r dataframe r-faq data.table

143
推荐指数
6
解决办法
16万
查看次数

dplyr可以汇总几个变量而不列出每个变量吗?

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)

r dplyr

73
推荐指数
2
解决办法
4万
查看次数

R使用data.table汇总多个列

我正在尝试使用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(...))似乎很笨拙.

我看了下面的例子,但对我的需求似乎有点复杂.谢谢

如何跨多个列汇总data.table

r data.table

52
推荐指数
1
解决办法
5万
查看次数

删除 R 中的重复项和求和值

我有一个数据集 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 = …

r sum duplicates

1
推荐指数
1
解决办法
4006
查看次数

求和多列

我正在尝试编写一个函数,它将根据前两列中的值对数据帧中的列求和.例如,我有一个矩阵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)

但问题是,我必须定义不修复的列的名称.所以,我想知道如何在不定义列名的情况下这样做.提前致谢!

r data.table

0
推荐指数
2
解决办法
756
查看次数

标签 统计

r ×5

data.table ×3

aggregate ×1

dataframe ×1

dplyr ×1

duplicates ×1

r-faq ×1

sum ×1