计算组的平均值(或其他汇总统计)并分配给原始数据
我想计算分组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