我想创建一个向量,其中每个元素都是另一个向量的i+6元素。
例如,在长度为120的向量中,我想创建另一个长度为20的向量,其中每个元素是初始向量的值i,i+6,i+12,i+18...,即我想提取原始向量的每个第6个元素。
a <- 1:120
b <- a[seq(1, length(a), 6)]
除了已经提到的使用seq解决方案外,获取连续片段的另一种技巧是使用一个短逻辑向量并利用向量循环:
foo[ c( rep(FALSE, 5), TRUE ) ]
seq
,你必须能够在向量上调用 length
。letters[letters < 'm'][c(TRUE, FALSE, FALSE)]
- Matt Chambers我认为您在问两件不一定相同的事情。
我想提取原始序列中每个第6个元素。
您可以通过对序列进行索引来实现此操作:
foo <- 1:120
foo[1:20*6]
我想创建一个向量,其中每个元素都是另一个向量的第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
foo[1:(i+6)!=(i+6)]
,即输出除第六个值以外的所有值。 - Fredrik Erlandssonx[1:(length(x)/n)*n]
。 - tjebonth_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
vec[mod(1:length(vec), n)==f]
nth_element <- function(vec, interval, offset=0){
vec[mod(1:length(vec), interval)==mod(offset, interval)]
}
seq.int
在微基准测试中更快,但我怀疑在实际程序中的任何性能提升都会被其他部分的运行时间所掩盖。 - Sean1708a = 1:120; b = [::6]
。Python无法做到前者,R也无法做到后者。 - bers