我正在尝试解决以下问题。我有一个小贴士:
> tibble( signal = c(0,1,0,0,1,0,0,1,1,1,1,1,1,0), days =0)
# A tibble: 14 x 2
signal days
<dbl> <dbl>
1 0 0
2 1 0
3 0 0
4 0 0
5 1 0
6 0 0
7 0 0
8 1 0
9 1 0
10 1 0
11 1 0
12 1 0
13 1 0
14 0 0
Run Code Online (Sandbox Code Playgroud)
我需要按以下方式填写天数列:
因此,结果将如下所示:
signal days
<dbl> <dbl>
1 0 0
2 1 1
3 0 2
4 0 3
5 1 4
6 0 0
7 0 0
8 1 1
9 1 2
10 1 3
11 1 4
12 1 1
13 1 2
14 0 3
Run Code Online (Sandbox Code Playgroud)
我可以使用 for 循环来做到这一点,但很难做到最好使用 dplyr 进行矢量化。
感谢任何帮助!
这是基本的东西data.table::set()
library(data.table)
i <- 1L
n <- nrow(df)
while (i < n) {
if (df$signal[i] == 1) {
k <- min(i+3L, n)
set(df, i = (i:k), j = "days", 1L:(k-i+1L))
i <- i+4L
} else {
i <- i+1L
}
}
# signal days
# 1 0 0
# 2 1 1
# 3 0 2
# 4 0 3
# 5 1 4
# 6 0 0
# 7 0 0
# 8 1 1
# 9 1 2
# 10 1 3
# 11 1 4
# 12 1 1
# 13 1 2
# 14 0 3
Run Code Online (Sandbox Code Playgroud)