我想根据数据框中的两个不同分组计算平均值。 示例数据集是:
> data
age Year Length
[1,] 3 2004 23.2
[2,] 3 2004 27.6
[3,] 3 2005 25.4
[4,] 3 2005 22.2
[5,] 4 2004 37.6
[6,] 4 2004 31.3
[7,] 4 2005 29.9
[8,] 4 2005 30.1
到目前为止,我已经使用ddply函数来计算一个年龄组内的均值。为此,我创建了一个索引来对所有三年前的数据进行排序,然后在Year中找到长度的均值。
logical3=(mydata$Age ==3)
mydata3= mydata[logical3,]
mean_values_3 <- ddply(mydata3, "Year", transform, grp.mean.values=mean(Length))
我想通过计算方法使得过程更快,更少笨重,而不是按年龄排序。
有没有办法1)找到基于1个以上组的平均值 - 这个分组不需要按顺序完成 - 2)我怎样才能获得输出到单独数据框中的方法而不附加到工作的。
答案 0 :(得分:5)
您想使用aggregate
功能。可能是这样的:
example_data <- data.frame(age=c(3,3,3,3,4,4,4,4),
Year=c(2004,2004,2005,2005,2004,2004,2005,2005),
Length=c(23.2,27.6,25.4,22.2,37.6,31.3,29.9,30.1))
aggregate(x=example_data$Length,
by=list(example_data$age,example_data$Year),
FUN=mean)
Group.1 Group.2 x
1 3 2004 25.40
2 4 2004 34.45
3 3 2005 23.80
4 4 2005 30.00
答案 1 :(得分:0)
使用plyr
包。它可以使用简单的代码汇总您的数据。 c(&#34;年&#34;,&#34;年龄&#34;)是指定组变量的方式。您还可以在此包中包含许多汇总统计函数。此代码将返回一个单独的数据框,其中包含分组变量和组均值的列。不需要分类。
group.means<-ddply(data,c("Year","age"),summarise,mean=mean(Length))
group.means