计算组的平均值(或其他汇总统计)并分配给原始数据
我想计算分组variables(“组”)每个级别内的数值variables(“值”)的mean
(或任何其他长度为1的摘要统计,例如, min
, max
, length
, sum
)。
汇总统计信息应分配给与原始数据具有相同长度的新variables。 也就是说,原始数据的每一行都应该有一个对应于当前组值的值 – 数据集不应该被折叠为每组一行。 例如,考虑组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
看看大家的function。 就像是
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)
一个select是使用plyr
。 ddply
需要一个data.frame
(第一个d)并返回一个data.frame
(第二个d)。 其他的XXply函数以类似的方式工作。 即ldply
期望一个list
并返回一个data.frame
, dlply
做相反的…等等等等。 第二个参数是分组variables。 第三个参数是我们要为每个组计算的函数。
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
你也可以在dplyr
这样做:
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"]
这是另一个使用基本函数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