0

我想要一些关于如何对多个变量和基于因素运行公式的帮助,所以一个基于一周每小时数据的示例:

df<- data.frame(a = runif(168),
+               b = runif(168),
+               c = runif(168),
+               d = rep(1:7, each = 24))

attach(df)

fx<-function(x) { mean(x) } # it can be more complicated, just to illustrate

a, b, c 是不同的变量,d 是我的因素。

在这里,我每天都有一个因子,我想将它应用于所有 3 个变量,并将每个结果写入一个单独的向量/数据框。所以,我现在做的是:

a.mean <-tapply(a, d, fx)
b.mean <-tapply(b, d, fx)
c.mean <-tapply(c, d, fx)

这让我很确定我错过了一些巧妙的技巧,但似乎找不到。我希望能够删除因子变量,并在指定的时间段和尽可能多的变量上循环。

4

2 回答 2

1

使用公式接口aggregate,点 ( .) 可用于表示所有其他变量:

aggregate(.~d, df, mean)
  d         a         b         c
1 1 0.5444300 0.4348559 0.5543393
2 2 0.5997199 0.4751082 0.5116904
3 3 0.4195746 0.6696669 0.5239728
4 4 0.4764139 0.5102245 0.4901829
5 5 0.3938329 0.3792583 0.4826971
6 6 0.4633260 0.5518397 0.4558116
7 7 0.4814347 0.4946845 0.5371871

请注意,您也不需要使用它附加 data.frame (因为它是aggregate作为参数提供的)。

于 2013-08-30T13:32:13.277 回答
0

您可以为此使用 plyr 包(其中 mydata 是您的数据):

 library(plyr)
 ddply(mydata,.(d), summarise, meana=mean(a),meanb=mean(b), meanc=mean(c))

或者只是使用这个:

library(plyr)
ddply(mydata,.(d), colwise(mean))
于 2013-08-30T13:31:56.843 回答