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

hel*_*loB 3 r data.table

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

a   b     c
1   2     5
1   -17   9
NA  11    4
NA  57    NA
63  NA    NA
Run Code Online (Sandbox Code Playgroud)

因此,我想提取:

a   b    c
63  57   4
Run Code Online (Sandbox Code Playgroud)

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

akr*_*run 7

如果数据集是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
Run Code Online (Sandbox Code Playgroud)

  • 是.或者`apply(df1,2,function(x)x [max(which(!is.na(x)))])` (2认同)

sin*_*dur 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))
Run Code Online (Sandbox Code Playgroud)