移除向量的最后一个元素

58

我该如何删除动物园系列的最后100个元素?

我知道使用name[-element]符号可以实现, 但我无法通过它来减去整个部分。


谢谢。我真正需要的是更加复杂的东西。 我需要移动这个序列,删除一些元素并从另一侧添加其他元素, 但是当我执行c(rep(0,10),x[1:(length(x)-11)])时,它不再是zoo了。干杯 - skan
3
接受一个答案来标记问题已解决怎么样? - MERose
6个回答

99

我喜欢使用head,因为它更容易打字。其他方法可能执行得更快...但是我懒得动手,而且我的电脑也不需要那么快。;-)

x <- head(x,-100)
> head(1:102,-100)
[1] 1 2

4
这个回答应该被接受。它可以在不知道 x 的长度的情况下使用,这是在试图有选择性地从文件中读取数据时具有优势的。根据 ?head 的说明:当 n 为负数时,返回 x 中除了最后/最前面的 n 个元素之外的所有元素。 - C8H10N4O2
4
值得注意的是,还有一个tail()函数,它的功能与之相同,但是是反向的。 - Mark Rucker

19

实际上,有一种更快的方法:

y <- x[1:(length(x)-1)]

代码展示:

> microbenchmark( y <- head(x, -1), y <- x[-length(x)],y <- x[1:(length(x)-1)], times=10000)
 Unit: microseconds
                      expr    min      lq     mean  median      uq      max
          y <- head(x, -1) 71.399 76.4090 85.97572 78.9230 84.2775 2795.076
        y <- x[-length(x)] 53.623 55.5585 65.15008 56.5680 61.1585 2523.141
 y <- x[1:(length(x) - 1)] 25.722 28.2925 36.43029 29.1855 30.4010 2410.975

1
@yaleidu 最好使用x [seq_len(length(x)-1)],这也适用于长度为1的情况。 - Ken Williams

15

我打赌 length<- 是剪辑向量最有效的方法:

> x <- 1:10^5
> length(x)
[1] 100000
> length(x) <- 3
> x
[1] 1 2 3

珍贵! 几乎与 head() 一样容易输入,但在其他方面更为简单! - Cris

7
只需使用数字索引,例如:
 N <- nrow(X)
 X <- X[1:(N-100-1),]

在这里,您需要确保N大于100等。


6

如果你是一行命令

x = x[1:(length(x) -101)]

有了你的所有回答,我几乎构建了所需的内容 coredata(zz2)<-c(rep(0,3),head(coredata(zz) ,-3))现在我只需要将它用于具有多列的zoo系列中,并修改其中一个。 - skan

3

为了完整起见,这里是另一个一行代码:

x <- lag(x, 100)[-1:-100]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接