【问题标题】:Identify similar repeating ascending patterns in numeric vectors in R识别 R 中数值向量中相似的重复上升模式
【发布时间】:2016-02-08 12:21:10
【问题描述】:

我有多个具有相似重复上升模式的数字向量。例如:

vec_1 <- c(43, 17, 186, 193, 186, 186, 474, 491, 498, 498, 673, 736, 743, 716, 
           44, 19, 193, 194, 193, 193, 472, 498, 476, 499, 673, 743, 714, 714, 
           19, 21, 194, 180, 194, 194, 485, 499, 481, 476, 712, 719, 712, 
           17, 40, 174, 180, 169, 495, 485, 673, 177, 485, 481, 714, 730, 733, 
           40, 33, 190, 174, 180, 482, 495, 495, 479, 703, 733, 704)

总是有 5 次重复。在上面的例子中:

  1. 以 43 开头,以 716 结尾
  2. 以 44 开头(其中 1. 结束),以 714 结尾

我想生成一个标识重复次数的新向量。对于 vec_1,这将是:

rep_nums_1 <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
                2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, ..., 5)

每次重复中的项目数可能不同(所以我不能只将前 14 个元素分配为 1,接下来的 14 个元素分配为 2,等等)

不确定如何最好地解决这个问题。一个非优雅的解决方案是检查序列中的下一个元素是否小于当前元素,例如300,如果是,请更改组号。有更好的建议吗?谢谢。

【问题讨论】:

  • 我可能很密集,但您似乎在第 3 步中忽略了很多重要信息。
  • 3 指的是重复数 3(所有五个都以小数开头,以大数结尾)。

标签: r vector pattern-matching repeat


【解决方案1】:

您可以进一步详细说明您的“模式”从何而来,但我认为这可以解决问题:

rep(1:5, diff(c(0, which(diff(vec_1) < -500), length(vec_1))))

rle 也应该有一种方法。

【讨论】:

    【解决方案2】:

    另一种变体是

    cumsum(c(TRUE,diff(vec_1) < -500))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多