我有一个框架,其中包含一个日期列(确实是类Date)和一个数字列(类Numeric)
first last date number
1 Reynalda Morley 1953-07-03 9
2 Annice Meador 1954-10-29 38
3 Jude Pertuit 1956-08-23 49
4 Viviana Dance 1979-11-07 32
5 Lavonda Babst 1982-02-06 17
6 Rachele Eisenhower 1985-11-12 27
7 Ericka Roesch 1987-05-02 22
8 Giovanni Bemis 1988-06-23 33
9 Ferne Mone 2005-12-21 36
10 Anjanette Eppinger 2010-01-03 4
我想每年走过一段时间,获得迄今为止的累计总数和一年中的平均值。粗略地说,我希望得到一个结果框架,如:
year total.to.date average.this.year
1 2001 128 32
2 2002 128 0
3 2003 145 17
4 2004 227 27.3333333333333
5 2005 267 20
我知道我可以为每次计算使用一系列子集,但我也知道,如果我更聪明...也许是应用? ......我可以简单地说出来。我是否需要添加一个库来处理这样的日期?
答案 0 :(得分:1)
它适用于by
函数。
dat <- read.table(text="first last date number
1 Reynalda Morley 1953-07-03 9
2 Annice Meador 1954-10-29 38
3 Jude Pertuit 1956-08-23 49
4 Viviana Dance 1979-11-07 32
5 Lavonda Babst 1982-02-06 17
6 Rachele Eisenhower 1985-11-12 27
7 Ericka Roesch 1987-05-02 22
8 Giovanni Bemis 1988-06-23 33
9 Ferne Mone 2005-12-21 36
10 Anjanette Eppinger 2010-01-03 4", header = TRUE)
dat$date <- as.Date(dat$date)
这些命令生成数据。累计总计使用cumsum
函数计算:
result <- with(dat, by(number, format(date,"%Y"), function(x) c(mean(x),sum(x))))
result <- data.frame(names(result), do.call(rbind, result))
result <- setNames(cbind(result[-3], cumsum(result[3])),
c("year", "average.this.year", "total.to.date"))
result
:
year average.this.year total.to.date
1 1953 9 9
2 1954 38 47
3 1956 49 96
4 1979 32 128
5 1982 17 145
6 1985 27 172
7 1987 22 194
8 1988 33 227
9 2005 36 263
10 2010 4 267