删除 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 没有行),应该很容易解决。
我 运行 对 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))
将 return1
因为FALSE
是最大值,在位置 1.
这意味着所有行都是 returned.
如果您在那种情况下想要一些其他行为(比如 return 没有行),应该很容易解决。