我的数据集包含超过400000个观察值。一个变量有很多“?”价值观。它的因子表看起来像这样,
? AA BB CC DD EE FF GG HH
17082 247 1813 96 72 12529 49732 382188 9
我不想删除所有的'?'值,而不是我想分割“?”基于正态分布的其他因素的价值。例如,虽然“ GG”因子应获得“?”的大部分。值最大,因此“ HH”应占“?”的最小部分价值观。我不知道如何使用 R 做到这一点?
我要分配17082'?'基于正态分布的值,然后为其分配相应的因子。
答案 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