根据出现概率填充缺失值
Fill missing value based on probability of occurrence
这是我的数据。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
这是一种使用 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]
这是我的数据。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
.
这是一种使用 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]