J'aimerais créer un vecteur dans lequel chaque élément est le i+6th
élément d'un autre vecteur.
Par exemple, dans un vecteur de longueur 120, je veux créer un autre vecteur de longueur 20 dans lequel chaque élément a la valeur i, i+6, i+12, i+18...
du vecteur initial, c’est-à-dire que je veux extraire tous les 6 éléments de l’original.
a <- 1:120
b <- a[seq(1, length(a), 6)]
Une autre astuce pour obtenir des éléments séquentiels (au-delà de la solution seq déjà mentionnée) consiste à utiliser un vecteur logique court et à utiliser le recyclage vectoriel:
foo[ c( rep(FALSE, 5), TRUE ) ]
Je pense que vous demandez deux choses qui ne sont pas nécessairement les mêmes
Je veux extraire chaque 6ème élément de l'original
Vous pouvez le faire en indexant une séquence:
foo <- 1:120
foo[1:20*6]
Je voudrais créer un vecteur dans lequel chaque élément est le i + 6ème élément d'un autre vecteur.
Un moyen facile de faire cela est de compléter un facteur logique avec FALSE jusqu'au 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
Pour sélectionner chaque nième élément de tout type position de départ dans le vecteur
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