提问人:Mike 提问时间:5/19/2011 最后编辑:Gregor ThomasMike 更新时间:11/18/2021 访问量:20828
计算组均值、总和或其他汇总统计数据。并将列分配给原始数据
Calculate group mean, sum, or other summary stats. and assign column to original data
问:
我想计算(或任何其他长度为一的汇总统计量,例如 , , , ) 在分组变量(“组”)的每个级别内。mean
min
max
length
sum
应将汇总统计量分配给与原始数据长度相同的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值 - 数据集不应折叠为每组一行。例如,考虑组: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
答:
7赞
Chase
5/19/2011
#1
一种选择是使用 . 期望 A(第一个 D)并返回 A(第二个 D)。其他 XXply 函数的工作方式与此类似;即 期望 a 并返回 a ,反其道而行之......依此类推。第二个参数是分组变量。第三个参数是我们要为每个组计算的函数。plyr
ddply
data.frame
data.frame
ldply
list
data.frame
dlply
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
这是使用基本函数和 :aggregate
merge
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)
如果要用于计算每组的其他内容,则需要指定 ,例如:ave
FUN = your-desired-function
FUN = min
df$grp.min <- ave(df$value, df$group, FUN = min)
35赞
Henrik
2/24/2016
#4
您可以使用以下方法执行此操作:dplyr
mutate
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]
上一个:如何按组获取汇总统计信息
下一个:如何按字典顺序订购我的数据帧
评论