如何在第一个负值处剪切矢量

时间:2016-06-17 08:43:39

标签: r

我想在第一个负值上剪切一个矢量,怎么办?

x <- c(1, 4 , 6 , 3, -1, 4, -3)

操作应该导致

c(1, 4, 6, 3)

5 个答案:

答案 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]