加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将聚合值加入原始数据帧

发布时间:2020-12-14 04:30:01 所属栏目:百科 来源:网络整理
导读:我使用的一种设计模式是在数据帧上执行“分组,分组,应用,组合(SAC)”,然后将聚合数据加入原始数据。这是有用的,例如,当计算每个县的偏离状态平均数在一个数据帧与许多州和县。很少是我的总体计算只是一个简单的意思,但它是一个很好的例子。我经常以下
我使用的一种设计模式是在数据帧上执行“分组,分组,应用,组合(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读