对R中更改数据帧的某些值求和

对R中更改数据帧的某些值求和,r,group-by,sum,dataframe,split-apply-combine,R,Group By,Sum,Dataframe,Split Apply Combine,我有一个数据帧,我想通过添加某些值来聚合它。假设我有六个集群。然后,我将来自每个集群的数据输入到某个函数中,该函数生成一个值x,然后将该值放入输出数据帧中 cluster year lambda v e x 1 1 1 -0.12160997 -0.31105287 -0.253391178 15 2 1 2 -0.12160997 -1.06313732 -0.300349972 10 3

我有一个数据帧,我想通过添加某些值来聚合它。假设我有六个集群。然后,我将来自每个集群的数据输入到某个函数中,该函数生成一个值x,然后将该值放入输出数据帧中

cluster year      lambda           v            e   x
1        1    1 -0.12160997 -0.31105287 -0.253391178  15
2        1    2 -0.12160997 -1.06313732 -0.300349972  10
3        1    3 -0.12160997 -0.06704185  0.754397069  40
4        2    1 -0.07378295 -0.31105287 -1.331764904   4
5        2    2 -0.07378295 -1.06313732  0.279413039  19
6        2    3 -0.07378295 -0.06704185 -0.004581941  23
7        3    1 -0.02809310 -0.31105287  0.239647063  28
8        3    2 -0.02809310 -1.06313732  1.284568047  38
9        3    3 -0.02809310 -0.06704185 -0.294881283  18
10       4    1  0.33479251 -0.31105287 -0.480496125  15
11       4    2  0.33479251 -1.06313732 -0.380251626  12
12       4    3  0.33479251 -0.06704185 -0.078851036  34
13       5    1  0.27953088 -0.31105287  1.435456851 100
14       5    2  0.27953088 -1.06313732 -0.795435607   0
15       5    3  0.27953088 -0.06704185 -0.166848530   0
16       6    1  0.29409366 -0.31105287  0.126647655  44
17       6    2  0.29409366 -1.06313732  0.162961658  18
18       6    3  0.29409366 -0.06704185 -0.812316265  13
为了进行汇总,我用
seroconv.cluster1=sum(data.all[c(1:3),6])
将所有三年中集群1的x值相加,并对每个集群重复


每次我现在更改集群的数量时,我都必须手动更改x的添加。我想说的是,
n.vec您似乎在寻求一种简单的方法来分割数据,应用一个函数(本例中为求和),然后将所有数据组合在一起。Split apply combine是一种常见的数据策略,在R中有几种Split/apply/combine策略,最流行的是base中的
ave
、dplyr
包和
data.table

下面是一个使用dplyr的数据示例:

library(dplyr)
df %>% group_by(cluster, year) %>% summarise_each(funs(sum))

要获得每个簇的
x
之和作为向量,可以使用
tapply

tapply(df$x, df$cluster, sum)
#   1   2   3   4   5   6 
#  65  46  84  61 100  75 
如果您希望以数据帧的形式输出,则可以使用
聚合

aggregate(x~cluster, sum, data=df)
#   cluster   x
# 1       1  65
# 2       2  46
# 3       3  84
# 4       4  61
# 5       5 100
# 6       6  75

要提供和回答的问题很长,到目前为止您尝试了什么?阅读关于dplyr/plyr的范例,这正是它的发明目的。您在这里要问两个问题:考虑到集群的当前配置,如何为每个集群计算x;以及如何为集群的每个新配置再次执行此操作。最好一次问一个问题,因为人们往往不会注意到你的复合问题的每一部分(就像这里发生的那样)。这听起来像是为每个集群数量动态创建了
cluster
列,所以类似于
lappy(n.vec,function(n)df%>%mutate(cluster=get_clusters(,n))groupby(cluster,year)%%>%总结每个(funs(平均值))