获取data.table中每列的最后一个非NA行的值

时间:2016-10-08 15:31:05

标签: r data.table

我有一个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而不是每列的相反情况的答案。

2 个答案:

答案 0 :(得分:6)

如果数据集为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

答案 1 :(得分:5)

对于希望仅使用基础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))