将聚合值加入原始数据帧

前端之家收集整理的这篇文章主要介绍了将聚合值加入原始数据帧前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用的一种设计模式是在数据帧上执行“分组,分组,应用,组合(SAC)”,然后将聚合数据加入原始数据。这是有用的,例如,当计算每个县的偏离状态平均数在一个数据帧与许多州和县。很少是我的总体计算只是一个简单的意思,但它是一个很好的例子。我经常以下列方式解决这个问题:
require(plyr)
set.seed(1)

## set up some data
group1 <- rep(1:3,4)
group2 <- sample(c("A","B","C"),12,rep=TRUE) 
values <- rnorm(12)
df <- data.frame(group1,group2,values)

## got some data,so let's aggregate

group1Mean <- ddply( df,"group1",function(x) 
                     data.frame( meanValue = mean(x$values) ) )
df <- merge( df,group1Mean )
df

它产生好的汇总数据,如下所示:

> df
   group1 group2   values meanValue
1       1      A  0.48743 -0.121033
2       1      A -0.04493 -0.121033
3       1      C -0.62124 -0.121033
4       1      C -0.30539 -0.121033
5       2      A  1.51178  0.004804
6       2      B  0.73832  0.004804
7       2      A -0.01619  0.004804
8       2      B -2.21470  0.004804
9       3      B  1.12493  0.758598
10      3      C  0.38984  0.758598
11      3      B  0.57578  0.758598
12      3      A  0.94384  0.758598

这是有效的,但是有没有替代方法来改善可读性,性能等?

一行代码的诀窍在于:
new <- ddply( df,transform,numcolwise(mean))
new

group1 group2      values    meanValue
1       1      A  0.48742905 -0.121033381
2       1      A -0.04493361 -0.121033381
3       1      C -0.62124058 -0.121033381
4       1      C -0.30538839 -0.121033381
5       2      A  1.51178117  0.004803931
6       2      B  0.73832471  0.004803931
7       2      A -0.01619026  0.004803931
8       2      B -2.21469989  0.004803931
9       3      B  1.12493092  0.758597929
10      3      C  0.38984324  0.758597929
11      3      B  0.57578135  0.758597929
12      3      A  0.94383621  0.758597929

identical(df,new)
[1] TRUE

猜你在找的设计模式相关文章