【问题标题】:Consecutive values below threshold value连续值低于阈值
【发布时间】:2015-04-04 23:25:30
【问题描述】:

我有一个大约 1000 年的 PDSI 值向量,范围从 6 到 -6。当连续四年或更多年

Original <- c(1,6,5,-2,-6,-4,-2,0,1,-2,-3,0) 
New <- c(0,0,0,1,1,1,1,0,0,0,0,0) # expected output

【问题讨论】:

  • 查看rle(PDSI&lt;2)之类的内容
  • @BenBolker 他想要== -2,所以可能是 rle(PDSI == -2)`
  • OP 最初想要&lt;(-2)(我看错了,然后OP编辑了)

标签: r


【解决方案1】:

你可以试试下面的

x <- c(rep(-2, 5), rep(0, 3), rep(-2, 4), rep(0,6), rep(5, 2), rep(-2, 6), rep(-6, 2))
    (r <- rle(x))
    ##  Run Length Encoding
    ##    lengths: int [1:7] 5 3 4 6 2 6 2
    ##    values : num [1:7] -2 0 -2 0 5 -2 -6
    (r$lengths[r$lengths > 3 & r$values== -2]) # length of each sequence
    ## [1] 5 4 6

要获得只有“-2”序列的向量,您可以尝试

r$values[r$values != -2] <- 0
rep(r$values,  r$lengths)

##  [1] -2 -2 -2 -2 -2  0  0  0 -2 -2 -2 -2  0  0  0  0  0  0  0  0 -2 -2 -2 -2 -2 -2  0  0

【讨论】:

  • 关闭,但 OP 想要 == -2 ,而不是 &lt; -2
  • 谢谢,很有用!然而,有没有办法制作一个最终产品,它可能是一个与原始长度相同的逻辑向量,但只有 1 有四个(或我们想要的任何长度)连续值
  • 您应该编辑您的帖子,以通过示例和预期结果阐明您到底想要什么。
  • 你说得对,我的帖子不够清楚,我很抱歉。不过谢谢你的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
相关资源
最近更新 更多