我有这样的矢量:
x <- c(0, 0, 0, 0, 4, 5, 0, 0, 3, 2, 7, 0, 0, 0)
我想只保留位置5到11的元素。我想删除开头和结尾的零。对于这个矢量,它很容易,因为它很小。
我有非常大的数据,并且通常需要所有向量的东西。
答案 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