【问题标题】:Calculating mean values based on two different groupings in a data frame [duplicate]根据数据框中的两个不同分组计算平均值[重复]
【发布时间】:2014-06-26 12:46:24
【问题描述】:

我想根据我的数据框中的两个不同分组计算平均值。 一个示例数据集是:

> 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)我怎样才能获得输出到单独数据帧而不附加到的方法工作的那个。

【问题讨论】:

  • 试试aggregate的公式法。见?aggregate。在你的情况下,像result

标签: r plyr mean


【解决方案1】:

您想使用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

【讨论】:

  • 您也可以这样写aggregate aggregate(Length ~ age + Year, FUN=mean, data=example_data) 以避免多次调用example_data 和使用$
【解决方案2】:

使用plyr 包。它可以用简单的代码总结您的数据。 c("Year","age") 是您指定组变量的方式。您还可以在此包中包含许多汇总统计功能。此代码将返回一个单独的数据框,其中包含分组变量的列和组均值。无需排序。

group.means<-ddply(data,c("Year","age"),summarise,mean=mean(Length))
group.means

【讨论】:

    猜你喜欢
    • 2020-03-03
    • 2021-06-07
    • 2015-06-28
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    相关资源
    最近更新 更多