2017-09-10 6 views
2

Ich versuche derzeit, Sequenzen zwischen Werten verschiedener Vektoren, die nicht die gleiche Länge haben, zu erstellen.Erstellen Sie Sequenz zwischen bestimmten Werten über zwei Vektoren

Vorstellen I haben die beiden folgenden Vektoren a und b:

a<-c(1, 8, 14, 34, 46, 55) 
b<-c(3, 6, 12, 13, 18, 42, 49, 50, 57, 200) 

Ich möchte einen dritten Vektor erzeugen, die die Sequenzen zwischen den Werten von a und dem nächsthöchsten Wert von b zeigt (hier: 1:3 als 1,2,3; 8:12 als 8,9,10,11,12; 14:18 als 14,15,16,17,18 und so weiter bis schließlich als 55,56,57).

Die Verwendung von mapply lieferte nicht die gewünschten Ergebnisse.

Antwort

6

Wir können findInterval verwenden, um die ‚B‘ auf der Grundlage der Teilmenge auf den Wert von ‚a‘ und dann mit Map erhalten die entsprechende Sequenz (:=) zwischen den Elementen der ‚a‘ und den Subset-Elemente von ‚b‘

Map(`:`, a, b[findInterval(a, b) + 1]) 
#[[1]] 
#[1] 1 2 3 

#[[2]] 
#[1] 8 9 10 11 12 

#[[3]] 
#[1] 14 15 16 17 18 

#[[4]] 
#[1] 34 35 36 37 38 39 40 41 42 

#[[5]] 
#[1] 46 47 48 49 

#[[6]] 
#[1] 55 56 57 
+0

Hallo, ich habe eine späte zusätzliche Anfrage: der Code für 95% meiner Daten nur gut gearbeitet hat. In einigen Fällen (Eingabedaten derselben Struktur wie zuvor) führt der Code jedoch zu einem "Fehler in .Primitiv (": ") (Punkte [[1L]] [[26L]], Punkte [[2L]] [] [26L]]): NA/NaN Argument "Ausgabe. Ich kann nicht sehen warum. "NA/NaN Argument" scheint zu sagen, dass keine Daten zu verarbeiten sind, aber ich habe die vorherigen Schritte manuell überprüft. Hast du eine Erklärung dafür? – sant

+0

@sant Könnten Sie überprüfen, ob die Fälle nur NA/NaN sind? Verwenden Sie in diesem Fall eine 'if/else'-Bedingung, um sich darum zu kümmern. – akrun

+0

Ja, es gibt ganze Listen, die nicht funktionieren. Nehmen wir zum Beispiel a und b vom ersten Post: Ich führe zwei ähnlich strukturierte Listen, und das Ergebnis ist der NA/NaN-Fehler. Können Sie angeben, auf welche Weise Sie eine if/else-Bedingung einbeziehen? Vielen Dank! – sant

4
lapply(a, function(x) x:b[b>x][1]) 
#[[1]] 
#[1] 1 2 3 

#[[2]] 
#[1] 8 9 10 11 12 

#[[3]] 
#[1] 14 15 16 17 18 

#[[4]] 
#[1] 34 35 36 37 38 39 40 41 42 

#[[5]] 
#[1] 46 47 48 49 

#[[6]] 
#[1] 55 56 57 
Verwandte Themen