R 如何在第一个负值处切割向量

R 如何在第一个负值处切割向量,r,R,我想切一个向量上的第一个负值,怎么办 x <- c(1, 4 , 6 , 3, -1, 4, -3) 尝试以下方法: x[1:which(x < 0)[1]-1] x[1:哪个(x

我想切一个向量上的第一个负值,怎么办

x <- c(1, 4 , 6 , 3, -1, 4, -3)
尝试以下方法:

x[1:which(x < 0)[1]-1]
x[1:哪个(x<0)[1]-1]

您可以使用
找到第一个负数的位置,然后减去1

x[1:(which(x < 0)[1] - 1)]
x[1:(哪个(x<0)[1]-1)]
如果第一个数字为负数,这种简单的方法将失败。但是我们可以建立一个检查,并根据需要返回一个空向量

cutNeg <- function(x){
  index <- which(x < 0)[1]
  if(index == 1) return(integer(0))
  x[1:(index-1)]
}

cutNeg(x)
cutNeg另一个选项是

x[!cumsum(x < 0)]
#[1] 1 4 6 3
x[!cumsum(x<0)]
#[1] 1 4 6 3

我们还可以使用@akrun回答中的
cumsum
的朋友,
cummin
计算累积最小值:

x[cummin(x) > 0]
[1] 1 4 6 3
同时使用grep works搜索“-”:

x[1:grep("-", x)[1]-1] 

非常好的解决方案如果只删除括号,就不再需要该函数(即
x[1:which(x<0)[1]-1]
)。然而,我们有两个相同的解决方案张贴!
x[1:grep("-", x)[1]-1]