Ho cercato di capire come gestire l'output di strsplit
un po 'meglio. Ho spesso dati come questo che desidero dividere:Estrazione dell'nimo elemento da un elenco nidificato successivo a 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"
Dopo la scissione che i risultati sono i seguenti:
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"
So dalla guida aiuto strsplit che le stringhe vuote finali non sono prodotti . Pertanto, ci sarà 1, 2 o 3 elementi in ciascuno dei miei risultati in base al numero di "/" per raggruppati per
Ottenere il primo elemento è molto banale:
sapply(strsplit(mydata, "/"), "[[", 1)
#[1] "144" "154" "146" "142" "143" "DNB" "90"
Ma io non sono certo come ottenere il 2 °, 3 ° ... quando ci sono questi numeri diversi di elementi in ogni risultato.
sapply(strsplit(mydata, "/"), "[[", 2)
# Error in FUN(X[[4L]], ...) : subscript out of bounds
mi auguro di tornare da una soluzione di lavoro, quanto segue:
#[1] "4" "2" "3" "NA" "4" "NA" "NA"
Questo è un relativamente piccolo esempio. Potrei fare un po 'di loop molto facilmente su questi dati, ma per dati reali con migliaia di osservazioni per eseguire lo strsplit su e dozzine di elementi prodotti da quello, speravo di trovare una soluzione più generalizzabile.
Usando '[' invece di '[[' sembra funzionare –
@alexis_laz Si dovrebbe fare questo una risposta. Non riesco a trovarlo in 'help (" [")'. – Roland