根据数据帧中的两个不同分组计算平均值

Eli*_*eth 0 r mean plyr

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

> 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
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经使用ddply函数来计算一个年龄段内的均值。为此,我创建了一个索引以对所有三年的旧数据进行排序,然后找到Year中的长度平均值。

logical3=(mydata$Age ==3)
mydata3= mydata[logical3,]
mean_values_3 <- ddply(mydata3, "Year", transform, grp.mean.values=mean(Length))
Run Code Online (Sandbox Code Playgroud)

我想通过计算方法使过程更快,更省力,而不必先按年龄排序。

有没有一种方法可以:1)根据多个组查找平均值-无需按顺序进行分组-2)如何获得将结果输出到单独的数据框中而不附加到工作组中的方法。

TAR*_*man 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
Run Code Online (Sandbox Code Playgroud)

  • 另外,您也可以用这种方式编写`aggregate`(汇总(Length〜age + Year,FUN = mean,data = example_data))以避免调用`example_data`并多次使用`$`。 (3认同)