在零元素处分裂向量
Splitting vector at zero-elements
我在 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
}
}
如果您只需要这些值,那么:
x <- c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)
x[diff(x) < 0]
# [1] 3 2
当然这假设值总是增加然后重置为零。
我在 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
}
}
如果您只需要这些值,那么:
x <- c(0, 0, 1, 2, 3, 0, 0, 1, 2, 0)
x[diff(x) < 0]
# [1] 3 2
当然这假设值总是增加然后重置为零。