【问题标题】:Get value of last non-NA row per column in data.table获取 data.table 中每列最后一个非 NA 行的值
【发布时间】:2016-10-08 15:31:04
【问题描述】:

我有一个datatable,其中每一列代表一个时间序列,我想以列顺序的方式获取每个时间序列的最后一个 NA 值。在我的特定用例中,我的数据如下所示:

a   b     c
1   2     5
1   -17   9
NA  11    4
NA  57    NA
63  NA    NA

所以我想从中提取:

a   b    c
63  57   4

我怎样才能做到这一点?到目前为止,我只看到解决每行而不是每列提取最后一个非 NA 的相反情况的答案。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    如果数据集是data.table,则遍历Data.table 的子集(.SD),将非NA 元素(x[!is.na(x)]) 子集化,然后提取具有tail 的元素中的最后一个元素。

    df1[, lapply(.SD, function(x) tail(x[!is.na(x)],1))]
    #   a  b c
    #1: 63 57 4
    

    【讨论】:

    • 是的。或apply(df1,2,function(x)x[max(which(!is.na(x)))])
    • @akrun,可以逐行执行吗?输出:5, 9, 4, 57, 63? (不确定这是否值得提出一个新问题)
    • @RafaelMartins 可能你需要do.call(pmax, c(df1, na.rm = TRUE)) #[1] 5 9 11 57 63
    【解决方案2】:

    对于希望仅使用基础R 的人。

    sapply(df, function(x) x[max(which(!is.na(x)))])
    

    在哪里

    df <- data.frame(a = c(1, 1, NA, NA, 63),
                     b = c(2, -17, 11, 57, NA),
                     c = c(5, 9, 4, NA, NA))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-27
      • 2014-11-10
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多