I would like to create a vector in which each element is the i+6th
element of another vector.
For example, in a vector of length 120 I want to create another vector of length 20 in which each element is value i, i+6, i+12, i+18...
of the initial vector, ie I want to extract every 6th element of the original.
a <- 1:120
b <- a[seq(1, length(a), 6)]
获取连续片段的另一个技巧(除了已经提到的 seq 解决方案)是使用短逻辑向量并使用向量回收:
foo[ c( rep(FALSE, 5), TRUE ) ]
I think you are asking two things which are not necessarily the same
I want to extract every 6th element of the original
You can do this by indexing a sequence:
foo <- 1:120
foo[1:20*6]
I would like to create a vector in which each element is the i+6th element of another vector.
An easy way to do this is to supplement a logical factor with FALSEs until 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
To select every nth element from any starting position in the vector
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
To select every n-th element with an offset/shift of f=0,...,n-1, use
vec[mod(1:length(vec), n)==f]
Of course, you can wrap this in a nice function:
nth_element <- function(vec, interval, offset=0){
vec[mod(1:length(vec), interval)==mod(offset, interval)]
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.