如何从向量中获取每个第三条记录?

时间:2011-10-18 14:07:17

标签: r vector

我有一个矢量:

> 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 个答案:

答案 0 :(得分:6)

让回收利用它是神奇的。

rn[c(FALSE, FALSE, TRUE)]

尽管这个(以及所有其他答案,我认为)都失败了length(rn) < 3。也许

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

答案 1 :(得分: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

答案 2 :(得分:3)

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

答案 3 :(得分: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

答案 4 :(得分: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"