我有一个矢量:
> dput(rn, 20)
c(128L, 241L, 354L, 467L, 580L, 693L, 806L, 919L, 1032L, 1145L,
1258L, 1371L, 1484L, 1597L, 1710L, 1823L, 1936L, 2049L, 2162L,
2275L)
如何从此向量中获取每个第三条记录?
答案 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"