这就是我的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。
答案 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]