我想了解如何在几个变量上运行公式并基于因子,所以基于一周的每小时数据的示例:
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)
这让我很确定有一些我错过但却无法找到的巧妙技巧。我希望能够删除因子变量,只是循环超过指定的时间段和我希望的多个变量。
答案 0 :(得分: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
)。
答案 1 :(得分: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))