Возьмите этот образец данных:Получить значение последнего непустого столбца для каждой строки
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>
В основном я хочу, чтобы запустить Grep на последнем столбце каждой строки, которая не является NA. Таким образом, мой х в Grep («шаблон», х) должно быть:
Cucumber
Apple
Lime
Honey
У меня есть целое число, которое говорит мне, который a_N является последним:
numcol <- rowSums(!is.na(df[,grep("(^a_)\\d", colnames(df))]))
До сих пор я пытался что-то вроде это в сочетании с ave(), apply() и dplyr:
grepl("pattern",df[,sprintf("a_%i",numcol)])
Однако я не могу заставить его работать. Имейте в виду, что мой набор данных очень велик, поэтому я надеялся, что это будет векторное решение или mb dplyr. Помощь была бы принята с благодарностью.
/e: Спасибо, это действительно хорошее решение. Мое мышление было слишком сложным. (регулярное выражение связано с моими более конкретными данными)
+1 На самом деле я искал 'max.col', забыл имя. – akrun