Ich habe versucht zu verstehen, wie man mit der Ausgabe von strsplit
ein bisschen besser umgehen. Ich habe oft Daten wie diese, die ich teilen wollen:Extrahieren nth Element aus einer verschachtelten Liste nach Strsplit - R
mydata <- c("144/4/5", "154/2", "146/3/5", "142", "143/4", "DNB", "90")
#[1] "144/4/5" "154/2" "146/3/5" "142" "143/4" "DNB" "90"
Nach Spaltung, dass die Ergebnisse sind wie folgt:
strsplit(mydata, "/")
#[[1]]
#[1] "144" "4" "5"
#[[2]]
#[1] "154" "2"
#[[3]]
#[1] "146" "3" "5"
#[[4]]
#[1] "142"
#[[5]]
#[1] "143" "4"
#[[6]]
#[1] "DNB"
#[[7]]
#[1] "90"
Ich weiß von der strsplit Hilfe-Anleitung, die letzte leere Strings nicht erzeugt werden . Daher wird es 1, 2 oder 3 Elementen in jedem meiner Ergebnisse basierend auf der Anzahl von „/“ aufzuspalten von
das erste Element zu erhalten ist sehr trivial:
sapply(strsplit(mydata, "/"), "[[", 1)
#[1] "144" "154" "146" "142" "143" "DNB" "90"
Aber ich bin nicht sicher, wie man die 2., 3. ... bekommt, wenn es diese ungleiche Anzahl von Elementen in jedem Ergebnis gibt.
sapply(strsplit(mydata, "/"), "[[", 2)
# Error in FUN(X[[4L]], ...) : subscript out of bounds
Ich hoffe, von einer Arbeitslösung zurück, die folgenden:
#[1] "4" "2" "3" "NA" "4" "NA" "NA"
Dies ist ein relativ kleines Beispiel ist. Ich konnte einige for-Schleife sehr einfach auf diesen Daten machen, aber für echte Daten mit 1000s von Beobachtungen, um den strsplit laufen zu lassen, und Dutzenden von Elementen, die daraus erzeugt wurden, hoffte ich, eine verallgemeinerbare Lösung zu finden.
mit '[' statt '[[' hinzufügen scheint –
zu funktionieren @alexis_laz Sie sollten diese eine Antwort machen. Ich kann das nicht in 'help (" [")' finden. – Roland