我正在尝试使用library(mvnmle)
(具有缺失值的多元正态数据的ML估计)来估算缺失值。以下是在库中使用随附的数据框apple
的示例:
data(apple)
mlest(apple)
$`muhat`
[1] 14.72227 49.33325
$sigmahat
[,1] [,2]
[1,] 89.53415 -90.69653
[2,] -90.69653 114.69470
$value
[1] 148.435
$gradient
[1] 4.988478e-06 2.892682e-06 8.726424e-07 1.682947e-05 -1.073488e-04
$stop.code
[1] 1
$iterations
[1] 34
在worms
数据帧的apple
列中几乎没有缺失值。 mlest
列表为muhat
提供了数据帧中两列的平均值。我想用worm
值替换muhat
列中的所有缺失值。在不同的数据框中,可能有多个缺少值的列。我想以编程方式将所有NA
的值替换为muhat
中的相应值。
在此示例中,我可以通过以下方式手动执行此操作:
apple[is.na(apple2)] <- res$muhat[2]
我该如何自动化?
答案 0 :(得分:1)
您可以使用tidyverse
个软件包吗?如果是这样,我认为这可以解决您的问题并且可以扩展。
library(purrr)
res <- mlest(apple)
map2_df(apple,
seq_along(apple),
function(column, col_ind, mu_vec){
if_else(is.na(column), mu_vec[col_ind], column)
},
res$muhat)
答案 1 :(得分:1)
使用tidyverse: 首先确保根据列名称来命名方法:
(mu=setNames(mlest(apple)$muhat,names(apple)))
size worms
14.72227 49.33325
现在使用replace_na
用特定的均值替换所有列:
library(tidyverse)
apple%>%replace_na(as.list(mu))
在基数R中,您可以使用sweep
:
sweep(apple,2,mlest(apple)$muhat,function(x,y)replace(x,is.na(x),y[is.na(x)]))
答案 2 :(得分:0)
如果我正确理解了您的问题和数据,则应该可以使用。
apple$worms <- ifelse(is.na(apple$worms),res$muhat,apple$worms)