在零元素处分割向量

时间:2019-02-04 17:23:51

标签: r vector split max intervals

我在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
  }
}

1 个答案:

答案 0 :(得分:1)

如果只需要这些值,则:

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

在此过程中,假设值始终在增加,然后重置为零。