如何用前进和后退填充的平均值替换数据框中的NULL值?

时间:2019-12-25 23:32:18

标签: r dataframe

我刚刚开始使用R,并且我试图用正向和反向值的平均值替换每列中的NULl值。下面是具有几个空值的示例数据框

  A      B     C  
  1      1    2000
  2      NA   NA
  3      4    5000
  4      NA   NA
  5      7    8000

我正在尝试做这样的事情。

  A      B      C 
  1      1     2000
  2     2.5    3500
  3      4     5000
  4     5.5    6500
  5      7     8000

tidyr 似乎完成了df %>% fill("A",.direction = c("down"))的一半工作,但是我该如何替换正向和反向值的平均值?

1 个答案:

答案 0 :(得分:1)

我们可以使用na.approx

library(zoo)
df1[-1] <- na.approx(df1[-1])
df1
#  A   B    C
#1 1 1.0 2000
#2 2 2.5 3500
#3 3 4.0 5000
#4 4 5.5 6500
#5 5 7.0 8000

或与lapply

df1[-1] <- lapply(df1[-1], na.approx)

或与dplyr

一起使用
library(dplyr)
df1 %>%
    mutate_if(is.numeric, na.approx)

或与data.table

library(data.table)
setDT(df1)[, (2:3) := lapply(.SD, na.approx), .SDcols = 2:3]

数据

df1 <- structure(list(A = 1:5, B = c(1L, NA, 4L, NA, 7L), C = c(2000L, 
NA, 5000L, NA, 8000L)), class = "data.frame", row.names = c(NA, 
-5L))