将 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达到同样的效果,你可以看看怎么做.
我有一个类似于以下的数据框,其中包含 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达到同样的效果,你可以看看怎么做