我希望通过特定的组和操作来聚合数据帧。
数据
> df <- data.frame(replicate(9, 1:4))
X1 X2 X3 X4 X5 X6 X7 X8 X9
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4
聚合
> aggregate(df[,2], list(df[,1]), mean)
Group.1 x
1 1 1
2 2 2
3 3 3
4 4 4
上面的聚合工作,这是很好的。但是,代替mean
,我需要使用像mean*sd/length^2
这样的函数的组合。我们是不是应该在这里使用聚合以外的东西呢?
发布于 2016-10-30 01:49:57
我修改了示例数据框架,以获得每个组的长度和标准偏差(每个组不能只使用一个数据点)。
> df
X1 X2 X3 X4 X5 X6 X7 X8 X9
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4
5 1 1 1 1 1 1 1 1 1
6 2 2 2 2 2 2 2 2 2
7 3 3 3 3 3 3 3 3 3
8 4 4 4 4 4 4 4 4 4
9 1 4 4 4 4 4 4 4 4
10 2 5 5 5 5 5 5 5 5
11 3 6 6 6 6 6 6 6 6
12 4 7 7 7 7 7 7 7 7
13 1 4 4 4 4 4 4 4 4
14 2 5 5 5 5 5 5 5 5
15 3 6 6 6 6 6 6 6 6
16 4 7 7 7 7 7 7 7 7
若要用更详细的公式进行汇总,请做:
aggregate(df[,2], list(df[,1]), function(x){mean(x)*sd(x)/length(x)^2})
Group.1 x
1 1 0.2706329
2 2 0.3788861
3 3 0.4871393
4 4 0.5953925
如果您想拥有相同的列标签,可以这样做:
aggregate(list(X2 = df[,2]), list(X1 = df[,1]), function(x){mean(x)*sd(x)/length(x)^2})
X1 X2
1 1 0.2706329
2 2 0.3788861
3 3 0.4871393
4 4 0.5953925
(或者用colnames
重命名)
发布于 2016-10-30 01:52:47
下面是您如何使用dplyr
来做这件事
df %>% group_by(X1) %>% summarize(x = mean(X2)*sd(X2)/length(X2)^2)
发布于 2016-10-30 02:52:10
下面是data.table
的一个选项
library(data.table)
setDT(df)[, .(x = mean(X2)*sd(X2)/.N^2), by = X1]
https://stackoverflow.com/questions/40325275
复制相似问题