2017-09-12 6 views
1

J'ai 2 vecteurs d'entrée comme indiqué ci-dessous. Je devrais faire correspondre les gammes et aurais besoin de les stocker dans des vecteurs séparés. Cela fonctionne comme ceci: Les valeurs dans iv2 entre les deux premières valeurs de iv1 sont stockées dans ov1, les valeurs dans iv2 entre les deuxième et troisième valeurs de iv2 et ainsi de suite. Remarque: Les valeurs dans les vecteurs d'entrée sont déjà dans l'ordre croissant. Des pensées s'il vous plaît?Sous-ensemble d'un vecteur dans un autre vecteur

Entrée:

iv1 <- c(100, 200, 300, 400, 435) 

iv2 <- c(60, 120, 140, 160, 180, 230, 250, 255, 265, 270, 295, 340, 355, 401, 422, 424, 430) 

Sortie:

ov1: 120, 140, 160, 180 

ov2: 230, 250, 255, 265, 270, 295 

ov3: 340, 355 

ov4: 401, 422, 424, 430 
+2

'split (iv2, coupé (iv2, breaks = iv1))' –

Répondre

1

Comme suggéré @RonakShah, la façon la plus efficace dans ce cas ceci:

split(iv2, cut(iv2, breaks = iv1,labels = paste0('ov',1:4))) 

Sortie:

$ov1 
[1] 120 140 160 180 

$ov2 
[1] 230 250 255 265 270 295 

$ov3 
[1] 340 355 

$ov4 
[1] 401 422 424 430 
+0

Parfait! La sortie semble bonne. Mais je suppose que les valeurs de chaque ov ne sont pas stockées sous forme de tableaux. J'essaie de voir ov1 et je reçois "Erreur: objet 'ov1' pas trouvé". Des suggestions s'il vous plaît? –

+0

@ user8556385 - Heureux que cela a aidé. Oui, les valeurs sont stockées dans une liste ici, pas un tableau. Donc, si nous stockons ce qui précède dans "x" (c'est-à-dire x <-split ...), alors nous pouvons accéder aux éléments individuels de la liste par nom (par exemple ov1) comme ceci: x [['ov1']] – www

+0

Je vous remercie! –