【问题标题】:Splitting vector at zero-elements在零元素处拆分向量
【发布时间】:2019-06-28 11:54:09
【问题描述】:

我在 R 中有一个数字向量,其间隔为递增整数,由任意数量的零分隔。示例:

x = c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)

我想在由零分隔的每个递增间隔中找到max()/ 最后一个元素。 对于给定的示例,这将是:

result
[1] 3 2

通过循环x 的元素来完成这项工作,但看起来相当原始(代码如下)。由于我是 R 新手,无法找到更聪明的方法,可能使用 cut() 和 split() 我会很感激有关更优雅解决方案的建议。谢谢!

x  <-  c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)
interval_max <- 0
interval_counter <- 0
result <- 0
in_interval = FALSE


for (n in 1:10){
  if (x[n]>0){
    if (in_interval){
      result[interval_counter] <- x[n]
    }
    else {
      interval_counter <-  interval_counter + 1
      result[interval_counter] <- x[n]
      in_interval <- TRUE
    }
  }
  else {
    in_interval <- FALSE
  }
}

【问题讨论】:

    标签: r vector split max intervals


    【解决方案1】:

    如果你想要的只是这些值,那么:

    x <- c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)
    x[diff(x) < 0]
    # [1] 3 2
    

    当然这假设值总是增加然后重置为零。

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 2017-02-16
      • 2019-09-10
      • 1970-01-01
      • 2013-07-01
      • 2014-09-27
      • 2010-12-13
      • 2016-08-19
      • 1970-01-01
      相关资源
      最近更新 更多