R 计算组平均值(或其他汇总统计数据)并分配给原始数据
我想计算分组变量(“组”)每个级别内数值变量(“值”)的R 计算组平均值(或其他汇总统计数据)并分配给原始数据,r,mean,summary,mutate,r-faq,R,Mean,Summary,Mutate,R Faq,我想计算分组变量(“组”)每个级别内数值变量(“值”)的平均值(或长度为1的任何其他汇总统计,例如最小值,最大值,长度,总和) 汇总统计应分配给与原始数据长度相同的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值-数据集不应该折叠为每组一行。例如,考虑组平均< /代码>: 以前 id group value 1 a 10 2 a 20 3 b 100 4 b 200 之后 一个选项是使用plyrddply需要一个da
平均值
(或长度为1的任何其他汇总统计,例如最小值
,最大值
,长度
,总和
)
汇总统计应分配给与原始数据长度相同的新变量。也就是说,原始数据的每一行都应该有一个与当前组值相对应的值-数据集不应该折叠为每组一行。例如,考虑组<代码>平均< /代码>:
以前
id group value
1 a 10
2 a 20
3 b 100
4 b 200
之后
一个选项是使用
plyr
ddply
需要一个data.frame
(第一个d)并返回一个data.frame
(第二个d)。其他XXply函数以类似的方式工作;i、 e.ldply
需要一个列表
并返回一个数据帧
,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
下面是另一个使用基本函数
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
您可以使用后缀获得“更好”的列名:
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
查看ave
功能。差不多
df$grp.mean.values <- ave(df$value, df$group)
您可以在dplyr
中使用mutate
执行此操作:
library(dplyr)
df %>%
group_by(group) %>%
mutate(grp.mean.values = mean(value))
…或使用data.table
通过引用分配新列(:=
):
df$grp.min <- ave(df$value, df$group, FUN = min)
library(dplyr)
df %>%
group_by(group) %>%
mutate(grp.mean.values = mean(value))
library(data.table)
setDT(df)[ , grp.mean.values := mean(value), by = group]