Đi dữ liệu mẫu này:Nhận Giá trị của cột không trống cuối cùng cho mỗi hàng
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>
Về cơ bản tôi muốn chạy một grep trên cột cuối cùng của mỗi hàng mà không phải là NA. Do đó x của tôi trong grep ("mẫu", x) nên:
Cucumber
Apple
Lime
Honey
Tôi có một số nguyên mà nói với tôi mà a_N là mới nhất:
numcol <- rowSums(!is.na(df[,grep("(^a_)\\d", colnames(df))]))
Cho đến nay tôi đã cố gắng một cái gì đó như điều này kết hợp với ave(), apply() và dplyr:
grepl("pattern",df[,sprintf("a_%i",numcol)])
Tuy nhiên tôi không thể làm cho nó hoạt động được. Hãy nhớ rằng tập dữ liệu của tôi là rất lớn vì vậy tôi đã hy vọng vor một giải pháp vectorized hoặc mb dplyr. Trợ giúp sẽ được đánh giá cao.
/e: Cảm ơn, đó là giải pháp thực sự tốt. Suy nghĩ của tôi quá phức tạp. (regex là do dữ liệu cụ thể của tôi)
+1 Thực ra tôi đang tìm 'max.col', quên tên. – akrun