将 NA 和 NaN 替换为跨多列的列平均值

Replace NA and NaN with column mean across multiple columns

我有一个类似于以下的数据框,其中包含 NA 和 NaN 值。

myinput <- data.frame("Date" = c("20010331", "20010331", "20010331", "20010630", "20010630"), "A" = c(3, NA, 5, NaN, 2), "B" = c(4, NA, 7, NaN, 8), "C" = c(6, NA, 5, NaN, 7), "D" = c(1, NA, 3, NaN, 8))

我想用列平均值替换 Na 和 NaN 值,并在所有列上循环。另外,我想在日期上分开这个。例如,A 列中的 NA 将是日期为 20010331 的所有 A 列值的平均值,而 A 列中的 NaN 将是日期为 20010630 的所有 A 列值的平均值。

有什么办法吗?很感谢任何形式的帮助。谢谢你。

dplyr:

myinput %>% 
   group_by(Date) %>% 
   mutate_at(vars(-group_cols()),~ifelse(is.na(.) | is.nan(.),
                                         mean(.,na.rm=TRUE),.))
# A tibble: 5 x 5
# Groups:   Date [2]
  Date         A     B     C     D
  <fct>    <dbl> <dbl> <dbl> <dbl>
1 20010331     3   4     6       1
2 20010331     4   5.5   5.5     2
3 20010331     5   7     5       3
4 20010630     2   8     7       8
5 20010630     2   8     7       8

既然你可以用data.table达到同样的效果,你可以看看怎么做.