从data.table中删除最后的NA值

3

我正在对数据表进行预测,有时尾部会有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 )]
1个回答

1

查找最后一个非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将返回一个空向量。这将导致seq抛出错误。 - which.max(rev(!is.na(v))将返回1,因为FALSE是最大值,在位置1处找到。这意味着将返回所有行。
如果您希望在这种情况下采取其他行动(例如返回零行),那么应该很容易解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接