2011-10-18 37 views
3

我有一個向量:如何從矢量中獲得第三條記錄?

> dput(rn, 20) 
c(128L, 241L, 354L, 467L, 580L, 693L, 806L, 919L, 1032L, 1145L, 
1258L, 1371L, 1484L, 1597L, 1710L, 1823L, 1936L, 2049L, 2162L, 
2275L) 

我如何從這個載體每三記錄?

回答

5

使用seq創建索引號的序列:

> rn[seq(3, 20, 3)] 
[1] 354 693 1032 1371 1710 2049 

這工作,因爲seq生成以下順序:

seq(from=3, to=20, by=3) 
[1] 3 6 9 12 15 18 

更一般地,如果你不知道預先向量的長度,可以使用length來計算:

seq(from=3, to=length(rn), by=3) 
[1] 3 6 9 12 15 18 

更多的幫助,請參見?seq

+0

哈哈......我們肯定在某種R-答疑同步。 +1幾秒鐘內擊敗我(並在30個字符的限制內詛咒)! –

3

rn[seq(3,length(rn),3)] # 30 chars

+0

毫秒更快;) – EDi

2

Mayby這樣嗎?

> x <- c(128L, 241L, 354L, 467L, 580L, 693L, 806L, 919L, 1032L, 1145L, 
+ 1258L, 1371L, 1484L, 1597L, 1710L, 1823L, 1936L, 2049L, 2162L, 
+ 2275L) 
> 
> x[seq(3, length(x), 3)] 
[1] 354 693 1032 1371 1710 2049 
6

讓回收做它的魔法。

rn[c(FALSE, FALSE, TRUE)] 

儘管這(和所有其他的答案,我認爲)失敗,length(rn) < 3。也許

rn[3L * seq_len(length(rn)/3L)] 
+0

+1非常聰明... – Andrie

+0

是的,確實聰明! – jrara

1

seq()本身並不好東西:x[seq(x)%%3==0]會做的伎倆。技術上x[seq_along(x)%%3==0]更快,但大多數時候你不會在乎。

例如,

> letters[seq(letters)%%3==0] 
[1] "c" "f" "i" "l" "o" "r" "u" "x"