prendere questi dati di esempio:Ottenere Valore dell'ultimo colonna non vuota per ogni riga
data.frame(a_1=c("Apple","Grapes","Melon","Peach"),a_2=c("Nuts","Kiwi","Lime","Honey"),a_3=c("Plum","Apple",NA,NA),a_4=c("Cucumber",NA,NA,NA))
a_1 a_2 a_3 a_4
1 Apple Nuts Plum Cucumber
2 Grapes Kiwi Apple <NA>
3 Melon Lime <NA> <NA>
4 Peach Honey <NA> <NA>
Fondamentalmente voglio eseguire un grep su l'ultima colonna di ogni riga che non è NA. Così la mia x in grep ("modello", x) dovrebbe essere:
Cucumber
Apple
Lime
Honey
ho un intero che mi dice che a_n è l'ultimo:
numcol <- rowSums(!is.na(df[,grep("(^a_)\\d", colnames(df))]))
Finora ho provato qualcosa di simile questo in combinazione con ave(), si applica() e dplyr:
grepl("pattern",df[,sprintf("a_%i",numcol)])
Tuttavia io non abbastanza può farlo funzionare. Tieni presente che il mio set di dati è molto grande, quindi speravo di ottenere una soluzione vettoriale o mb dplyr. L'aiuto sarebbe molto apprezzato.
/e: Grazie, questa è davvero una buona soluzione. Il mio pensiero era troppo complicato. (l'espressione regolare è dovuta ai miei dati più specifici)
+1 In realtà stavo cercando 'max.col', ho dimenticato il nome. – akrun