找到至少一列不是 NA 的最后一行

Mr.*_*ver 1 r data-manipulation dataframe dplyr data.table

我有一个对象,在一定数量的行之后,每列中都有所有 NA。一些列在此之前也有 NA。我想获取至少一列有数据的最后一行的行索引。以下是一些可以使用的示例数据:

编辑:为了健壮性,我在@G 之后的第二行添加了 NA。格洛腾迪克评论。在这种情况下,输出仍应为 5。

df <- data.frame(a = 1:5, b = 6:10, c = c(1:3,rep(NA, 2)))
df <- rbind(df, rep(NA, ncol(df)), rep(NA, ncol(df)))
df[2,] <- NA

df
   a  b  c
1  1  6  1
2 NA NA NA
3  3  8  3
4  4  9 NA
5  5 10 NA
6 NA NA NA
7 NA NA NA
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 5

1) na.trim这会从底部删除全部为 NA 的行,然后返回剩余的行数:

library(zoo)
nrow(na.trim(df, "right", is.na = "all"))
## [1] 5
Run Code Online (Sandbox Code Playgroud)

2) Base R 我们可以用它的行号替换每个非 NA,然后取这些数字的最大值:

max(ifelse(is.na(df), NA, row(df)), na.rm = TRUE)
## [1] 5
Run Code Online (Sandbox Code Playgroud)

2a)如果所有条目都是数字,如问题所示,那么这可以缩短为:

max(row(df) + 0 * df, na.rm = TRUE)
## [1] 5
Run Code Online (Sandbox Code Playgroud)