仅为最后一个值插入 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
在 R 中,在数据框中,我知道我可以使用 na.approx()
.
但是,如果我只想为最后一个可用值而不是所有 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