我有一个包含20年月度数据的数据框:
year month value
1960 January 925
1960 February 903
1960 March 1006
...
1969 December 892
1970 January 990
1970 February 866
...
1979 December 120
我想创建一个数据框,在这里我总结每个十年的总数,按月计算:
year month value
decade_60s January 4012
decade_60s February 8678
decade_60s March 9317
...
decade_60s December 3995
decade_70s January 8005
decade_70s February 9112
...
decade_70s December 325
我一直关注aggregate
功能,但这似乎不是正确的选择。
我使用which
函数看了一些仔细的子集,但这很快就变得太乱了。
对于这类问题,什么是正确的方法?我是否需要在某个时候使用apply
,如果是,请如何使用?
我觉得使用for
循环增长的诱惑,但我不认为这将是提高我的技能的最好方法..
感谢您的建议。
PS:month
值是一个序数因子,如果这很重要。
答案 0 :(得分:1)
聚合是一种使用基础R
的方法首先定义十年
yourdata$decade <- cut(yourdata$year, breaks=c(1960,1970,1980), labels=c(60,70),
include.lowest=TRUE, right=FALSE)
然后汇总数据
aggregate(value ~ decade + month, data=yourdata , sum)
然后命令获得所需的输出
答案 1 :(得分:1)
plyr
&#39; count
+ gsub
绝对是您的朋友:
library(plyr)
dat <- structure(list(year = c(1960L, 1960L, 1960L, 1969L, 1970L, 1970L, 1979L),
month = structure(c(3L, 2L, 4L, 1L, 3L, 2L, 1L),
.Label = c("December", "February", "January", "March"),
class = "factor"),
value = c(925L, 903L, 1006L, 892L, 990L, 866L, 120L)),
.Names = c("year", "month", "value"),
class = "data.frame", row.names = c(NA, -7L))
dat$decade <- gsub("[0-9]$", "0", dat$year)
count(dat, .(decade, month), wt_var=.(value))
## decade month freq
## 1 1960 December 892
## 2 1960 February 903
## 3 1960 January 925
## 4 1960 March 1006
## 5 1970 December 120
## 6 1970 February 866
## 7 1970 January 990