R 如何计算距下次事件发生的天数?
使用类似的数据集提出了另一个问题,但问题不同- 我有一个数据集,它是一个日期列表,后跟一列,其中“R”表示常规日期,而“S”表示特殊日期:R 如何计算距下次事件发生的天数?,r,mutate,R,Mutate,使用类似的数据集提出了另一个问题,但问题不同- 我有一个数据集,它是一个日期列表,后跟一列,其中“R”表示常规日期,而“S”表示特殊日期: date <- c('01/01', '01/02', '01/03', '01/04', '01/05', '01/06', '01/07', '01/08', '01/09') day <- c('S', 'R', 'R', 'R', 'R', 'S', 'R', 'R', 'S') data <- data.frame(date,
date <- c('01/01', '01/02', '01/03', '01/04', '01/05', '01/06', '01/07', '01/08', '01/09')
day <- c('S', 'R', 'R', 'R', 'R', 'S', 'R', 'R', 'S')
data <- data.frame(date, day)
现在,我试图添加一个列,指出离下一个“特殊”日还有多少天。因此,对于显示的数据,它应该是0(01/01是特殊的),4(01/02是距离下一个特殊的日子01/06还有4天),3,2,1,0(01/06是特殊的),等等
谢谢 这里是一个基于R的想法。当一天是
S
时,使用cumsum
创建组,取每个组的长度序列,并将最大值(对应于S
)替换为0,即
i1 <- cumsum(data$day == 'S')
data$res <- ave(i1, i1, FUN = function(i) { i2 <- seq_along(i); rev(replace(i2, max(i2), 0)) })
这是一种
dplyr
方法。您可以使用cumsum
将特殊日期前的天数组合在一起,然后通过计算天数n()
并减去组中的行号row\u number()
进行倒计时
library(dplyr)
data %>%
group_by(grp = cumsum(lag(day, default = first(day)) == 'S')) %>%
mutate(days_until = n() - row_number())
输出
# A tibble: 9 x 4
# Groups: grp [3]
date day grp days_until
<fct> <fct> <int> <int>
1 01/01 S 1 0
2 01/02 R 2 4
3 01/03 R 2 3
4 01/04 R 2 2
5 01/05 R 2 1
6 01/06 S 2 0
7 01/07 R 3 2
8 01/08 R 3 1
9 01/09 S 3 0
#一个tible:9 x 4
#组别:grp[3]
截止日期
01/01 S 10
2 01/02 R 2 4
3 01/03 R 2 3
04年01月4日第2条
5 01/05 R 2 1
06年01月6日第20页
2007年1月7日R 3 2
8 01/08 R 3 1
9 01/09 S 3 0
也谢谢,刚刚看到本的答案!感激
library(dplyr)
data %>%
group_by(grp = cumsum(lag(day, default = first(day)) == 'S')) %>%
mutate(days_until = n() - row_number())
# A tibble: 9 x 4
# Groups: grp [3]
date day grp days_until
<fct> <fct> <int> <int>
1 01/01 S 1 0
2 01/02 R 2 4
3 01/03 R 2 3
4 01/04 R 2 2
5 01/05 R 2 1
6 01/06 S 2 0
7 01/07 R 3 2
8 01/08 R 3 1
9 01/09 S 3 0