计算组的平均值(或其他汇总统计)并分配给原始数据

我想计算分组variables(“组”)每个级别内的数值variables(“值”)的mean (或任何其他长度为1的摘要统计,例如, minmaxlengthsum )。

汇总统计信息应分配给与原始数据具有相同长度的新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是使用plyrddply需要一个data.frame (第一个d)并返回一个data.frame (第二个d)。 其他的XXply函数以类似的方式工作。 即ldply期望一个list并返回一个data.framedlply做相反的…等等等等。 第二个参数是分组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"] 

这是另一个使用基本函数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