好吧,第二个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 ...
...

基本上,通常我会结合使用ddplysummarize来计算合奏(例如,全年中每小时的平均值)。

在上述情况下,我将创建一个类别,例如小时(例如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/

10-13 03:24