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)
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)