提取向量的每个 n 元素

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

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

142678 次浏览
a <- 1:120
b <- a[seq(1, length(a), 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

获得序列片段的另一个技巧(超出前面提到的 seq 解决方案)是使用一个简短的逻辑向量并使用向量循环:

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

从向量中的 任何起始位置选择每个 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

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

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

当然,您可以用一个很好的函数来包装它:

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