我有一个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值。
我有一个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
对于希望仅使用基本的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))
data.table
,则循环遍历数据表的子集(.SD
),对非空元素进行子集化(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)))])
- R.S.5、9、4、57、63
?(不确定这是否值得新问题) - Rafaeldo.call(pmax, c(df1, na.rm = TRUE)) # [1] 5 9 11 57 63
- akrun