[1] Мы можем использовать rowSums
, чтобы создать логический вектор, и обернуть с помощью which
, чтобы вернуть индекс
tail(which(rowSums(!is.na(df)) > 0), 1)
#[1] 5
[2 ] Или другой вариант - lengths
. после удаления NA
в каждом столбце
max(lengths(lapply(df, na.omit)))
#[1] 5
Эта опция может не работать в некоторых крайних случаях, как упомянуто в комментариях @G Grothendieck, т. е. когда вся конкретная строка представляет собой NA перед последним набором строк NA
[3] Или другой вариант which
с параметром arr.ind
в логической матрице
max(which(!is.na(df), arr.ind = TRUE)[,1])
#[1] 5
[4] или с row
и is.na
max(row(df) * NA^is.na(df), na.rm = TRUE)
#[1] 5
ПРИМЕЧАНИЕ. Все подходы используют base R и не требуют дополнительных пакетов