2010-09-20 84 views
37

如何刪除動物園系列的最後100個元素?R:刪除矢量的最後一個元素

我知道這個名字[ - 元素]符號 ,但我不能讓它工作一。減去全斷面

+0

謝謝我真正需要的是一點點複雜。 我需要移動系列,刪除一些元素,並從另一側添加其他元素 但是當我做c(rep(0,10),x [1:(length(x)-11)])時,它不是動物園更多。歡呼 – skan 2010-09-21 07:29:52

+1

@skan:接受將問題標記爲已解決的答案是什麼? – MERose 2015-12-28 23:23:04

回答

7

只需用數字指標,即

N <- nrow(X) 
X <- X[1:(N-100-1),] 

,你應該需要確保N是大100等

5

,如果你是一個內襯

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

我已經構建了幾乎所需的所有答案 coredata(zz2)< - c(rep(0,3),head(coredata(zz), - 3)) 現在我只需要在裏面使用它一個動物園系列有幾列,只修改一個。 – skan 2010-09-21 07:42:56

71

我喜歡使用head,因爲它更容易輸入。其他方法雖然可能執行得更快,但是我很懶,而且我的電腦沒有。 ;-)

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

這個答案應該被接受。它可以在不知道x的長度的情況下使用,如果您試圖從文件中有選擇地讀取數據,這是有利的。從'?head':'n:如果否定的話,[返回]除了x的最後一個/第一個元素之外的所有元素。' – C8H10N4O2 2015-12-02 21:57:20

+1

值得注意的是還有'tail()',其功能完全相同,但是相反。如果'x'的長度爲1,則 – 2017-04-12 03:03:16

8

我敢打賭length<-是修剪向量的最有效的方法:

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

另外一個襯爲完整起見:

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

事實上,有更快的方法:

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 
+0

不起作用 – 2017-03-01 15:29:11

相關問題