好吧,第二个R问题快速接quick而至。
我的资料:
Timestamp St_01 St_02 ...
1 2008-02-08 00:00:00 26.020 25.840 ...
2 2008-02-08 00:10:00 25.985 25.790 ...
3 2008-02-08 00:20:00 25.930 25.765 ...
4 2008-02-08 00:30:00 25.925 25.730 ...
5 2008-02-08 00:40:00 25.975 25.695 ...
...
基本上,通常我会结合使用
ddply
和summarize
来计算合奏(例如,全年中每小时的平均值)。在上述情况下,我将创建一个类别,例如小时(例如
strptime(data$Timestamp,"%H") -> data$hour
,然后在ddply
中使用该类别,例如ddply(data,"hour", summarize, St_01=mean(St_01), St_02=mean(St_02)...)
在每个列中按类别进行平均。但是这就是粘的地方。我要处理40多个列,我不准备一一一一地将它们作为
summarize
函数的参数来键入。我曾经在shell中编写一个循环来生成此代码,但这不是程序员解决问题的方式吗?因此,请祈祷,有谁能以更少的击键次数来获得相同的结果呢?
最佳答案
您可以使用numcolwise()
对所有数字列运行摘要。
这是使用iris
的示例:
ddply(iris, .(Species), numcolwise(mean))
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
同样,有
catcolwise()
可以汇总所有分类列。有关更多帮助和示例,请参见
?numcolwise
。编辑
另一种方法是使用
reshape2
(由@ gsk3提出)。在此示例中,这具有更多的击键操作,但具有极大的灵活性:库(reshape2)
miris <- melt(iris, id.vars="Species")
x <- ddply(miris, .(Species, variable), summarize, mean=mean(value))
dcast(x, Species~variable, value.var="mean")
Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1 setosa 5.006 3.428 1.462 0.246
2 versicolor 5.936 2.770 4.260 1.326
3 virginica 6.588 2.974 5.552 2.026
关于r - ddply +汇总,可在大量列中重复相同的统计函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10787640/