部分“?”基于正态分布的值

时间:2019-08-20 15:13:22

标签: r

我的数据集包含超过400000个观察值。一个变量有很多“?”价值观。它的因子表看起来像这样,

 ?       AA     BB     CC     DD    EE       FF      GG        HH
17082    247   1813    96     72    12529    49732   382188    9

我不想删除所有的'?'值,而不是我想分割“?”基于正态分布的其他因素的价值。例如,虽然“ GG”因子应获得“?”的大部分。值最大,因此“ HH”应占“?”的最小部分价值观。我不知道如何使用 R 做到这一点?

我要分配17082'?'基于正态分布的值,然后为其分配相应的因子。

2 个答案:

答案 0 :(得分:1)

您可以像这样使用sample

set.seed(42)
table(sample(factor(c("AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH")), 17082, TRUE, prob=c(247, 1813, 96, 72, 12529, 49732, 382188, 9)))
#   AA    BB    CC    DD    EE    FF    GG    HH
#   15    71     4     2   482  1884 14624     0

或具有真实数据集:

#Create your dataset
x <- factor(c("?", "AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH"))
x <- rep(x, c(17082, 247, 1813, 96, 72, 12529, 49732, 382188, 9))

tt  <- table(x)
set.seed(42)
x[x=="?"]  <- sample(levels(x)[-1], tt[1], TRUE, prob=tt[-1])
table(x)
#     ?     AA     BB     CC     DD     EE     FF     GG     HH 
#     0    262   1884    100     74  13011  51616 396812      9 

还是简单地使用不带“?”的数据进行采样:

x[x=="?"]  <- sample(x[x!="?"], sum(x=="?"))

答案 1 :(得分:1)

如果我理解正确,您希望将所有?值分配给其他值,并按它们出现的比例分配。如果是这样,则只需创建prop.table而不包含{{1} }的值,然后重新缩放到总计的大小(也许可以用?作为衡量标准。

round