【问题标题】:remove last NA values in a data.table删除 data.table 中的最后一个 NA 值
【发布时间】:2016-01-21 09:43:42
【问题描述】:

我在 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 )]

【问题讨论】:

    标签: r data.table na


    【解决方案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。
      这意味着返回所有行。

    如果您在这种情况下想要一些其他行为(例如不返回任何行),那么解决起来应该很简单。

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多