我想在第一个负值上剪切一个矢量,怎么办?
x <- c(1, 4 , 6 , 3, -1, 4, -3)
操作应该导致
c(1, 4, 6, 3)
答案 0 :(得分:5)
另一种选择是
x[!cumsum(x < 0)]
#[1] 1 4 6 3
答案 1 :(得分:4)
您可以使用which
查找第一个负数的位置,然后减去1
x[1:(which(x < 0)[1] - 1)]
如果第一个数字是负数,这个简单的方法将失败。但我们可以根据需要构建一个检查并返回一个空向量。
cutNeg <- function(x){
index <- which(x < 0)[1]
if(index == 1) return(integer(0))
x[1:(index-1)]
}
cutNeg(x)
答案 2 :(得分:2)
尝试这种方法:
x[1:which(x < 0)[1]-1]
答案 3 :(得分:1)
我们还可以使用来自@ akrun的答案cumsum
的朋友cummin
来计算累积最低值:
x[cummin(x) > 0]
[1] 1 4 6 3
答案 4 :(得分:1)
使用grep搜索“ - ”也可以:
x[1:grep("-", x)[1]-1]