2011-03-08 56 views
90

我想創建一個矢量,其中每個元素是另一個矢量的i+6th元素。提取矢量的每第n個元素

例如,在長度爲120的矢量中,我想要創建另一個長度爲20的矢量,其中每個元素是初始矢量的值i, i+6, i+12, i+18...,即我想提取原始的每第6個元素。

回答

112
a <- 1:120 
b <- a[seq(1, length(a), 6)] 
+7

這是更好地使用seq.int(1L,長度(A),6L),至少@WojciechSobala你能否評論爲什麼它是更好的長向量 – 2011-03-08 20:45:03

+1

? – 2016-05-09 10:07:05

+1

@DavidPell'seq.int'在微基準測試中速度更快,但我懷疑實際程序中的任何性能提升都會因其他部分的運行時間而變得不足。 – Sean1708 2016-07-22 14:37:37

21

我想你問兩個東西是不一定相同

我想提取的 每6個元素的原始

爲此,您可以通過索引一個順序:

foo <- 1:120 
foo[1:20*6] 

我想在 中創建一個向量,其中每個元素是另一個向量的第i + 6個 元素。

一個簡單的方法來做到這一點是補充與FALSEs邏輯因素,直到i+6

foo <- 1:120 
i <- 1 
foo[1:(i+6)==(i+6)] 
[1] 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 

i <- 10 
foo[1:(i+6)==(i+6)] 
[1] 16 32 48 64 80 96 112 
+0

所以光滑!我也在另一個方向上使用了它,即foo [1:(i + 6)!=(i + 6)],即輸出除第六個以外的所有值。 – 2013-10-01 11:53:21

33

用於獲取連續的塊(除了已經提到的SEQ溶液)的另一個技巧是使用短邏輯矢量和使用矢量循環:

foo[ c(rep(FALSE, 5), TRUE) ] 
+1

這種方法的一個優點是它可以用於臨時;爲了使用'seq',你必須能夠在vector上調用'length'。 '字母['m'] [c(真,假,假)] – 2017-09-14 21:07:24