Weź te dane przykładowe:uzyskać wartość ostatniego niepustego kolumny dla każdego wiersza
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>
Zasadniczo chcę uruchomić grep na ostatniej kolumnie każdego wiersza, który nie jest na. Tak więc moja xw grep („wzór”, x) powinno być:
Cucumber
Apple
Lime
Honey
mam liczbą całkowitą, która mówi mi, który a_n jest ostatni:
numcol <- rowSums(!is.na(df[,grep("(^a_)\\d", colnames(df))]))
Do tej pory próbowałem coś podobnego to w połączeniu z ave(), apply() i dplyr:
grepl("pattern",df[,sprintf("a_%i",numcol)])
Jednak nie mogę tego zrobić. Należy pamiętać, że mój zbiór danych jest bardzo duży, więc miałem nadzieję, że to wektoryzowane rozwiązanie lub mb dplyr. Pomoc byłaby bardzo ceniona.
/e: Dzięki, to naprawdę dobre rozwiązanie. Moje myślenie było zbyt skomplikowane. (Wyjaśnienie wynika z moich bardziej szczegółowych danych)
+1 Właściwie szukałem 'max.col', zapomniałem nazwy. – akrun