【问题标题】:Detecting the pattern of a binary sequence and extend the sequence with same pattern in R检测二进制序列的模式并在R中使用相同的模式扩展序列
【发布时间】:2019-10-18 13:03:50
【问题描述】:

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

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

干杯

【问题讨论】:

  • 你可以做df$occurrence &lt;- rep(c(0, 0, 1), length.out = nrow(df))
  • 您需要更好地定义您认为的“模式”。假设您想将序列拆分为尽可能小的相同子序列以检测“模式”,我是否正确?
  • 您好,这里的0,0,1序列只是一个例子,实际上这是未知的。 @AndrewGustar
  • @Roland,是的!对于序列 "0, 0, 1, 0, 1, 0, 0, 1, 0, 1," 我想通过捕获 "0, 0, 1, 0, 1" 作为重复子序列来预测下一个值.

标签: r date time-series


【解决方案1】:

这是一个函数,它将在 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 是数据中的行数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多