仅为最后一个值插入 NA

interpolate NA only for the last value

在 R 中,在数据框中,我知道我可以使用 na.approx().

用最后一个可用值填充所有 NA 值

但是,如果我只想为最后一个可用值而不是所有 NA 执行此操作,我该怎么办,如本例所示:

a = c(1, 2, 3, 4, NA, NA, NA, 8, 9, 10, NA, NA)

成为:

a = c(1, 2, 3, 4, NA, NA, NA, 8, 9, 10, 10, 10)

我的第一直觉是首先测试最后一个值是否为 NA,然后测试最后一个非 NA 值。有没有更快的方法?

我们可以找到最后一个非 NA 的索引,然后得到从那个点到 'a' 的 length 的序列,并分配那些最后一个非 NA

i1 <- tail(which(!is.na(a)), 1)
a[i1:length(a)] <- a[i1]
a
#[1]  1  2  3  4 NA NA NA  8  9 10 10 10

你可以试试下面的代码

a[-(1:tail(which(!is.na(a)),1))] <- tail(a[!is.na(a)],1)

这样

> a
 [1]  1  2  3  4 NA NA NA  8  9 10 10 10