使用最大计数汇总数据框

时间:2014-01-25 09:32:43

标签: r plyr

我有这个data.frame:

counts <- data.frame(year = sort(rep(2000:2009, 12)), month = rep(month.abb,10), count = sample(1:500, 120, replace = T))

前20行数据:

head(counts, 20)

   year month count
1  2000   Jan    14
2  2000   Feb   182
3  2000   Mar   462
4  2000   Apr   395
5  2000   May   107
6  2000   Jun   127
7  2000   Jul   371
8  2000   Aug   158
9  2000   Sep   147
10 2000   Oct    41
11 2000   Nov   141
12 2000   Dec    27
13 2001   Jan    72
14 2001   Feb     7
15 2001   Mar    40
16 2001   Apr   351
17 2001   May   342
18 2001   Jun    81
19 2001   Jul   442
20 2001   Aug   389

假设我尝试使用通常的R代码计算这些数据的标准差:

library(plyr)
ddply(counts, .(month), summarise, s.d. = sd(count))

   month     s.d.
1    Apr 145.3018
2    Aug 140.9949
3    Dec 173.9406
4    Feb 127.5296
5    Jan 148.2661
6    Jul 162.4893
7    Jun 133.4383
8    Mar 125.8425
9    May 168.9517
10   Nov  93.1370
11   Oct 167.9436
12   Sep 166.8740

这给出了每个月平均值附近的标准偏差。如何让R在每个月的最大值附近输出标准偏差?

2 个答案:

答案 0 :(得分:1)

你想:“每月最大值和这个最大值的平均值”[与标准偏差不同]。

counts <- data.frame(year = sort(rep(2000:2009, 12)), month = rep(month.abb,10), count = sample(1:500, 120, replace = T))

library(data.table)
counts=data.table(counts)
counts[,mean(count-max(count)),by=month]

答案 1 :(得分:0)

这个问题非常模糊。如果要将差异的标准差计算为最大值,可以使用以下代码:

> library(plyr)
> ddply(counts, .(month), summarise, sd = sd(count - max(count)))
   month       sd
1    Apr 182.5071
2    Aug 114.3068
3    Dec 117.1049
4    Feb 184.4638
5    Jan 138.1755
6    Jul 167.0677
7    Jun 100.8841
8    Mar 144.8724
9    May 173.3452
10   Nov 132.0204
11   Oct 127.4645
12   Sep 152.2162