繁体   English   中英

检测二进制序列的模式并在 R 中扩展具有相同模式的序列

[英]Detecting the pattern of a binary sequence and extend the sequence with same pattern in R

我正在寻找一种解决方案来有效捕获值仅为 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

我知道标题可能是我还没有找到答案的原因,所以任何关于好的问题描述的建议都将受到欢迎。

干杯

这是一个 function,它将在 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)之类的内容重复该序列,其中yfind_rep(x)n是数据中的行数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM