web-dev-qa-db-fra.com

Extraire chaque nième élément d'un vecteur

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.

115
RodgerDodger
a <- 1:120
b <- a[seq(1, length(a), 6)]
140
nico

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 ) ]
38
Greg Snow

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
23
Sacha Epskamp

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
0
user5783745