计算组均值、总和或其他汇总统计数据。并将列分配给原始数据

Calculate group mean, sum, or other summary stats. and assign column to original data

提问人:Mike 提问时间:5/19/2011 最后编辑:Gregor ThomasMike 更新时间:11/18/2021 访问量:20828

问:

我想计算(或任何其他长度为一的汇总统计量,例如 , , , ) 在分组变量(“组”)的每个级别内。meanminmaxlengthsum

应将汇总统计量分配给与原始数据长度相同的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值 - 数据集不应折叠为每组一行。例如,考虑组:mean

以前

id  group  value
1   a      10
2   a      20
3   b      100
4   b      200

id  group  value  grp.mean.values
1   a      10     15
2   a      20     15
3   b      100    150
4   b      200    150
值摘要 DPLYR R-常见问题

评论


答:

7赞 Chase 5/19/2011 #1

一种选择是使用 . 期望 A(第一个 D)并返回 A(第二个 D)。其他 XXply 函数的工作方式与此类似;即 期望 a 并返回 a ,反其道而行之......依此类推。第二个参数是分组变量。第三个参数是我们要为每个组计算的函数。plyrddplydata.framedata.frameldplylistdata.framedlply

require(plyr)
ddply(dat, "group", transform, grp.mean.values = mean(value))

  id group value grp.mean.values
1  1     a    10              15
2  2     a    20              15
3  3     b   100             150
4  4     b   200             150
4赞 Greg 5/19/2011 #2

这是使用基本函数和 :aggregatemerge

merge(x, aggregate(value ~ group, data = x, mean), 
     by = "group", suffixes = c("", "mean"))

  group id value.x value.y
1     a  1      10      15
2     a  2      20      15
3     b  3     100     150
4     b  4     200     150

您可以使用以下命令获得“更好”的列名称:suffixes

merge(x, aggregate(value ~ group, data = x, mean), 
     by = "group", suffixes = c("", ".mean"))


  group id value value.mean
1     a  1    10         15
2     a  2    20         15
3     b  3   100        150
4     b  4   200        150
32赞 Henrico 5/19/2011 #3

看一下功能。类似的东西ave

df$grp.mean.values <- ave(df$value, df$group)

如果要用于计算每组的其他内容,则需要指定 ,例如:aveFUN = your-desired-functionFUN = min

df$grp.min <- ave(df$value, df$group, FUN = min)
35赞 Henrik 2/24/2016 #4

您可以使用以下方法执行此操作:dplyrmutate

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(grp.mean.values = mean(value))

...或用于通过引用分配新列 ():data.table:=

library(data.table)
setDT(df)[ , grp.mean.values := mean(value), by = group]