r 中多列的条件均值

iva*_*nge 3 aggregate r mean dataframe tapply

我们用这个mtcars来说明一下情况。

我想要做的与下面的多列相同。qsec获得一列(在示例中)相对于具有特定值(4 和 6,在下面的示例中)的另一列的平均值。我稍后会比较结果,所以也许我会将结果存储在向量中

table(mtcars$cyl)
4  6  8
11  7 14

mean(mtcars$qsec[mtcars$cyl == 4], na.rm = T)
mean(mtcars$qsec[mtcars$gear == 4], na.rm = T)
Run Code Online (Sandbox Code Playgroud)

我想检查qsec关于的方法cyl,让我们说gearcarb,对于均值具有相同的“模式”,即观察值的平均值为 4 和观察值的平均值为 6。在真实的数据集中,将有几列具有相同的集合数字(2、0 和 1)。我将比较列的均值(在示例中qsec)与观测值 2 和 0。

我尝试查看诸如tapply, apply,之类的函数sapply。但我坚持将条件平均应用于每一列(一次)。

希望我说清楚了。谢谢你!

Kar*_*ius 5

您正在寻找的功能是aggregate

aggregate(. ~ cyl, FUN=mean, data=mtcars[,c("cyl", "qsec", "gear", "carb")], 
          subset=cyl %in% c(4, 6)
          )

  cyl     qsec     gear     carb
1   4 19.13727 4.090909 1.545455
2   6 17.97714 3.857143 3.428571
Run Code Online (Sandbox Code Playgroud)

上面的函数中data=是data.frame。这里我们只选择想要的列。并subset=指定要保留哪些数据行(在本例中只有 cyl 4 和 6)。

该公式. ~ cyl指示根据cyl列汇总所有列。