R在数据框中使用因子应用公式

时间:2013-08-30 13:13:55

标签: r dataframe

我想了解如何在几个变量上运行公式并基于因子,所以基于一周的每小时数据的示例:

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)

这让我很确定有一些我错过但却无法找到的巧妙技巧。我希望能够删除因子变量,只是循环超过指定的时间段和我希望的多个变量。

2 个答案:

答案 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))