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