根据发生概率填写缺失值

时间:2017-11-06 18:37:26

标签: r data.table missing-data

这就是我的data.table / dataframe看起来像

library(data.table)
dt <- fread('
   STATE     ZIP      
   PA        19333        
   PA        19327        
   PA        19333        
   PA        NA        
   PA        19355
   PA        19333
   PA        NA
   PA        19355
   PA        NA     
')

我在ZIP列中有三个缺失值。我想根据它们在数据集中出现的概率,用ZIPs的非缺失样本值填充缺失值。例如,ZIP 19333在数据集中出现三次,ZIP 19355在数据集中出现两次,19327出现一次。因此,ZIP 19333在PA的数据集中发生概率为50%,19355的概率为33.33%,19327的概率为16.17%。所以19333在尝试填补三个缺失的ZIP时被选中的概率最高。最终填充的数据集可能如下所示,其中两个缺失值由'19333'填充,一个由'19355'填充:

       STATE     ZIP      
       PA        19333        
       PA        19327        
       PA        19333        
       PA        19333       
       PA        19355
       PA        19333
       PA        19333
       PA        19355
       PA        19355    

我的数据集中有多个STATE。主要想法是根据给定STATE的ZIP发生概率填写缺失的ZIP。

1 个答案:

答案 0 :(得分:4)

这是一种使用sample的方式,包含在便利功能中。

sample_fill_na = function(x) {
    x_na = is.na(x)
    x[x_na] = sample(x[!x_na], size = sum(x_na), replace = TRUE)
    return(x)
}

dt[, ZIP := sample_fill_na(ZIP), by = STATE]