Проверьте, существует ли значение в следующих нескольких строках в R - PullRequest
1 голос
/ 06 апреля 2020

У меня есть df вроде:

df <- tibble(a = seq(ymd('2020-01-01'), ymd('2020-02-01'), "1 day"),
            b = sample(0:1, 32, prob = c(0.9, 0.1), replace = T))

Я хочу создать другой df с вызванным флагом, который равен 1, если значение b в этой строке или в следующих 6 строках равно 1, иначе это ноль

Я слышал об опережающих и запаздывающих операторах dplyr, но не очень уверен, как их использовать. Мы будем благодарны за любую помощь.

df1 <- df %>%
  mutate(out = ifelse(1 %in% lead(b, 7), 1, 0))

С решением для зоопарка df выглядит так, как показано ниже, а это не то, что я хочу, потому что здесь первая 1 в b происходит в 2020-01-02, поэтому первый ряд out до того, как он должен иметь 1 (потому что это происходит либо в той строке b, либо в следующих 6 строках b.) Строки с 3 по 5 также не должны быть 1, потому что в этих строках или 6 нет 1 в b строки после них.

set.seed(70)
df <- tibble(a = seq(ymd('2020-01-01'), ymd('2020-02-01'), "1 day"),
            b = sample(0:1, 32, prob = c(0.9, 0.1), replace = T))

df2 <- df %>% 
  mutate(out = +(zoo::rollapplyr(b, width = 7, FUN = function(x) any(x == 1), partial = TRUE)))


            a   b   out expected_out
1   2020-01-01  0   0    1
2   2020-01-02  1   1    1
3   2020-01-03  0   1    0
4   2020-01-04  0   1    0
5   2020-01-05  0   1    0
6   2020-01-06  0   1    1
7   2020-01-07  0   1    1
8   2020-01-08  0   1    1
9   2020-01-09  0   0    1
10  2020-01-10  0   0    1
11  2020-01-11  0   0    1
12  2020-01-12  1   1    1
13  2020-01-13  0   1    0
14  2020-01-14  0   1    0
15  2020-01-15  0   1    0
16  2020-01-16  0   1    0
17  2020-01-17  0   1    0
18  2020-01-18  0   1    0
19  2020-01-19  0   0    0
20  2020-01-20  0   0    0
21  2020-01-21  0   0    1
22  2020-01-22  0   0    1
23  2020-01-23  0   0    1
24  2020-01-24  0   0    1
25  2020-01-25  0   0    1
26  2020-01-26  0   0    1
27  2020-01-27  1   1    1
28  2020-01-28  0   1    0
29  2020-01-29  0   1    0
30  2020-01-30  0   1    0
31  2020-01-31  0   1    0
32  2020-02-01  0   1    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...