我有此数据:
data <- structure(list(A = c(10L, 25L, NA, 17L, 8L, 3L), B = c(2L, NA,
NA, NA, NA, 2L), C = c(NA, 4L, 6L, 4L, 3L, NA)), class = "data.frame", row.names = c(NA,
-6L))
我想用该列最近的两个可用值的平均值替换每列的NA。对于结果应如下所示:
data <- structure(list(A = c(10L, 25L, 21L, 17L, 8L, 3L), B = c(2L, 2L,
2L, 2L, 2L, 2L), C = c(4L, 4L, 6L, 4L, 3L, 3L)), class = "data.frame", row.names = c(NA,
-6L))
我们可以用 na.approx
library(zoo)
data[] <- lapply(data, function(x) na.locf0(na.approx(x, na.rm = FALSE)))
或搭配 tidyverse
library(dplyr)
library(tidyr)
data %>%
mutate_all(na.approx, na.rm = FALSE) %>%
fill(everything(), .direction = 'updown')
# A B C
#1 10 2 4
#2 25 2 4
#3 21 2 6
#4 17 2 4
#5 8 2 3
#6 3 2 3
data <- structure(list(A = c(10L, 25L, NA, 17L, 8L, 3L),
B = c(2L, NA, NA, NA, NA, 2L),
C = c(NA, 4L, 6L, 4L, 3L, NA)), class = "data.frame", row.names = c(NA, -6L))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句