我有一个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而不是每列的相反情况的答案.
如果数据集是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)
对于希望仅使用碱的人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)