Обнаружение шаблона двоичной последовательности и расширение последовательности с тем же шаблоном в R - PullRequest
1 голос
/ 18 октября 2019

Я ищу решение для эффективного захвата шаблона последовательности со значениями только 0 и 1. Данные выглядят так:

   id            date       occurrence
   <chr>       <date>        <dbl>
 1 10010020    2019-08-01        0
 2 10010020    2019-08-02        0
 3 10010020    2019-08-03        1
 4 10010020    2019-08-04        0
 5 10010020    2019-08-05        0
 6 10010020    2019-08-06        1
 7 10010020    2019-08-07        0
 8 10010020    2019-08-08        0
 9 10010020    2019-08-09        1
10 10010020    2019-08-10        0

, и я хотел бы расширить фрейм данных до чего-то вроде:

   <chr>       <date>        <dbl>
 1 10010020    2019-08-01        0
 2 10010020    2019-08-02        0
 3 10010020    2019-08-03        1
 4 10010020    2019-08-04        0
 5 10010020    2019-08-05        0
 6 10010020    2019-08-06        1
 7 10010020    2019-08-07        0
 8 10010020    2019-08-08        0
 9 10010020    2019-08-09        1
10 10010020    2019-08-10        0
11 10010020    2019-08-11        0
12 10010020    2019-08-12        1
13 10010020    2019-08-13        0
14 10010020    2019-08-14        0
15 10010020    2019-08-15        1
16 10010020    2019-08-16        0
17 10010020    2019-08-17        0
18 10010020    2019-08-18        1
19 10010020    2019-08-19        0
20 10010020    2019-08-20        0
21 10010020    2019-08-21        1
22 10010020    2019-08-22        0
23 10010020    2019-08-23        0
24 10010020    2019-08-24        1
25 10010020    2019-08-25        0
26 10010020    2019-08-26        0
27 10010020    2019-08-27        1
28 10010020    2019-08-28        0
29 10010020    2019-08-29        0
30 10010020    2019-08-30        1

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

Приветствия

1 Ответ

0 голосов
/ 18 октября 2019

Вот функция, которая найдет самую короткую повторяющуюся последовательность в векторе 0 и 1 с ...

find_rep <- function(x) {
   head(x, which(sapply(1:(length(x) - 1), 
                        function(z) sum(abs(x[-(1:z)] - head(x, -z)))
                        ) == 0)[1])
}

find_rep(c(0,0,1,1,0,0,0,1,1,0,0,0))
[1] 0 0 1 1 0

find_rep(c(0,1,0,0,1,0,0,1))
[1] 0 1 0

Она сравнивает x со смещенными версиями самой себя и возвращает самую короткую секцию дляразница равна нулю.

Затем вы можете повторить последовательность с чем-то вроде rep(y, length.out = n), где y равно find_rep(x), а n - количество строк в ваших данных.

...