删除 data.table 中的最后一个 NA 值

remove last NA values in a data.table

我 运行 对 data.tables 的预测有时尾部有 NA 值。这些值尚不可用,可以删除。如何删除系列末尾的 NA 值?

library(data.table)

DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
DT[c(4, 8:9), v := NA]

# required output:
DT[, head(.SD, 7 )]

找到最后一个非NA并保持一切正常:

DT[ seq( max(which(!is.na(v))) ) ]

同样,您可以反过来使用 which.max

DT[ seq( .N-which.max(rev(!is.na(v)))+1L ) ]

如果最后没有 NA,这两个选项都可以正常工作。

如果 v 完全是 NA,它们的行为会有所不同:

  • max(which(!is.na(v))) 将给出 -Inf 因为 which 将 return 一个空向量。
    这使得 seq 抛出错误。

  • which.max(rev(!is.na(v)) 将 return 1 因为 FALSE 是最大值,在位置 1.
    这意味着所有行都是 returned.

如果您在那种情况下想要一些其他行为(比如 return 没有行),应该很容易解决。