在向量的开头和结尾删除零

时间:2014-06-03 08:02:00

标签: r

我有这样的矢量:

x <-  c(0, 0, 0, 0, 4, 5, 0, 0, 3, 2, 7, 0, 0, 0)

我想只保留位置5到11的元素。我想删除开头和结尾的零。对于这个矢量,它很容易,因为它很小。

我有非常大的数据,并且通常需要所有向量的东西。

4 个答案:

答案 0 :(得分:12)

试试这个:

x[ min( which ( x != 0 )) : max( which( x != 0 )) ]

查找非零的所有值的索引,并将第一个 - min和最后一个 - max转换为子集x

答案 1 :(得分:3)

您可以尝试以下内容:

x=c(0,0,0,0,4,5,0,0,3,2,7,0,0,0)
rl <- rle(x)

if(rl$values[1] == 0)
    x <- tail(x, -rl$lengths[1])
if(tail(rl$values,1) == 0)
    x <- head(x, -tail(rl$lengths,1))

x
## 4 5 0 0 3 2 7

希望它有所帮助,

亚历

答案 2 :(得分:2)

这也可以:

x[cumsum(x) & rev(cumsum(rev(x)))]
# [1] 4 5 0 0 3 2 7

答案 3 :(得分:0)

我可能会定义两个函数,并将它们组成:

trim_leading <- function(x, value=0) {
  w <- which.max(cummax(x != value))
  x[seq.int(w, length(x))]
}

trim_trailing <- function(x, value=0) {
  w <- which.max(cumsum(x != value))
  x[seq.int(w)]
}

然后通过以下方式传递数据:

x %>% trim_leading %>% trim_trailing