【发布时间】:2012-05-03 06:58:21
【问题描述】:
我有一个 data.frame 格式:
Date
2011-08-16
2011-08-17
2011-08-28
2011-09-01
2011-09-05
2011-09-06
2011-10-01
2011-10-02
2011-10-03
2011-10-04
我想做的是在日期按顺序出现时进行计数,即它们并排。
在上面的例子中,我们会有 2,1,1,2,4
【问题讨论】:
标签: r
我有一个 data.frame 格式:
Date
2011-08-16
2011-08-17
2011-08-28
2011-09-01
2011-09-05
2011-09-06
2011-10-01
2011-10-02
2011-10-03
2011-10-04
我想做的是在日期按顺序出现时进行计数,即它们并排。
在上面的例子中,我们会有 2,1,1,2,4
【问题讨论】:
标签: r
这个怎么样:
制作可重现的示例数据:
dat <- read.table(text = "2011-08-16
2011-08-17
2011-08-28
2011-09-01
2011-09-05
2011-09-06
2011-10-01
2011-10-02
2011-10-03
2011-10-04")
使用rle 获取连续日期的运行计数,在this answer 和this answer 之后:
(rle (cumsum( c(0, diff(as.Date(dat$V1)) > 1) ) ) )$lengths
[1] 2 1 1 2 4
【讨论】:
cumsum 是什么意思。如果我这样忽略它:(rle (( c(0, diff(as.Date(dat$V1)) > 1) ) ) )$lengths 那么我会得到与您想要的不同的东西:[1] 2 3 1 1 3
runs <- rle(c(1,diff(as.Date(dat$Date)) > 1)) table(runs$lengths[runs$values == 0])