r语言 - 替换数据框中的NA,保持列值分布不变



问题

我有一个数据框(~15000行,90列),其中包含NA的列。在SO上,我发现了多个关于用另一个df或正态分布的值填充NA的问题。但这些答案将破坏专栏本身的当前分布。例子:

Var2NANA3NANA3

在R进制中:

set.seed(5)  
data.frame(lapply(df,(x)replace(x,is.na(x),sample(na.omit(x),sum(is.na(x))))))
Person_ID Var1 Var2
1          A    1    3
2          B    1    2
3          C    2    1
4          D    1    4
5          E    1    3
6          F    1    1
7          G    1    3
8          H    1    1
9          I    2    2
10         J    1    1
11         K    1    3
12         L    2    4

为了保持值的比例,除了@onyambu的建议外,在生成样本时建议包含值的概率。

df[,-1] <- data.frame(apply(df[,-1], 
2, 
function(x) 
replace(x, is.na(x),
sample(sort(unique(na.omit(x))), 
sum(is.na(x)), 
replace = TRUE, 
prob = prop.table(table(x))))))

输出:

> df
Person_ID Var1 Var2
1          A    1    4
2          B    1    2
3          C    2    2
4          D    1    4
5          E    1    3
6          F    1    1
7          G    1    3
8          H    1    1
9          I    2    2
10         J    1    4
11         K    1    3
12         L    1    4

最新更新