提取向量的每个第n个元素

时间:2011-03-08 19:56:46

标签: r vector

我想创建一个向量,其中每个元素都是另一个向量的i+6th元素。

例如,在长度为120的向量中,我想创建另一个长度为20的向量,其中每个元素都是初始向量的值i, i+6, i+12, i+18...,即我想要提取原始的每个第6个元素。 / p>

5 个答案:

答案 0 :(得分:134)

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

答案 1 :(得分:36)

获取连续片段的另一个技巧(超出已提到的seq解决方案)是使用短逻辑向量并使用向量回收:

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

答案 2 :(得分:22)

我认为你问的是两件不一定相同的东西

  

我想提取每个第6个元素   原来的

您可以通过索引序列来完成此操作:

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

  

我想创建一个矢量   每个元素是i + 6   另一个向量的元素。

一种简单的方法是使用FALSE补充逻辑因子,直到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

答案 3 :(得分:0)

要从向量中的 任何 起始位置中选择第n个元素

nth_element <- function(vector, starting_position, n) { 
  vector[seq(starting_position, length(vector), n)] 
  }

# E.g.
vec <- 1:12

nth_element(vec, 1, 3)
# [1]  1  4  7 10

nth_element(vec, 2, 3)
# [1]  2  5  8 11

答案 4 :(得分:0)

要选择偏移/位移为 f=0,...,n-1 的每个第 n 个元素,请使用

vec[mod(1:length(vec), n)==f]

当然,您可以将其包装在一个不错的函数中:

nth_element <- function(vec, interval, offset=0){
    vec[mod(1:length(vec), interval)==mod(offset, interval)]
}