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]