Ziy*_* Xu 5 r vectorization missing-data na
我试图NA在向量中替换缺失值().NA两个相等数字之间的数字由该数字代替.NA应该留下两个不同的价值观NA.例如,给定矢量"a",我希望它是"b".
a = c(1, NA, NA, NA, 1, NA, NA, NA, 2, NA, NA, 2, 3, NA, NA, 3)
b = c(1, 1, 1, 1, 1, NA, NA, NA, 2, 2, 2, 2, 3, 3, 3, 3)
Run Code Online (Sandbox Code Playgroud)
如您所见,NA值1和之间的第二次运行2不会被替换.
有没有办法对计算进行矢量化?
您可以使用zoo包中的便利功能。在这里,我们替换NA原始向量,其中插值(由 产生na.approx)等于“最后的观察结转”(由 产生na.locf):
library(zoo)
a_ap <- na.approx(a)
a_locf <- na.locf(a)
a[which(a_ap == a_locf)] <- a_ap[which(a_ap == a_locf)]
a
# [1] 1 1 1 1 1 NA NA NA 2 2 2 2 3 3 3 3
Run Code Online (Sandbox Code Playgroud)
要考虑前导和尾随NA,请添加na.rm = FALSE:
a <- c(NA, 1, NA, NA, NA, 1, NA, NA, NA, 2, NA, NA, 2, 3, NA, NA, 3, NA)
a_ap <- na.approx(a, na.rm = FALSE)
a_locf <- na.locf(a, na.rm = FALSE)
a[which(a_ap == a_locf)] <- a_ap[which(a_ap == a_locf)]
a
# [1] NA 1 1 1 1 1 NA NA NA 2 2 2 2 3 3 3 3 NA
Run Code Online (Sandbox Code Playgroud)