【发布时间】:2014-08-29 15:17:51
【问题描述】:
我想对关于 10 K x 50 K 的相当大的数据集执行两件事。以下是较小的200 x 10000 集。
首先我想生成 5% 的缺失值,这可能很简单,可以通过简单的技巧来完成:
# dummy data
set.seed(123)
# matrix of X variable
xmat <- matrix(sample(0:4, 2000000, replace = TRUE), ncol = 10000)
colnames(xmat) <- paste ("M", 1:10000, sep ="")
rownames(xmat) <- paste("sample", 1:200, sep = "")
在数据中 5% 的随机位置生成缺失值。
N <- 2000000*0.05 # 5% random missing values
inds_miss <- round ( runif(N, 1, length(xmat)) )
xmat[inds_miss] <- NA
现在我想生成错误(意味着与上面矩阵中的值不同。上面的矩阵的值是 0 到 4。所以我想做的是:
(1) 我想用另一个不是 x 的值替换 x 值(例如 0 可以替换为非 0 的随机样本(即 1 或 2 或 3 或 4),类似地 1 可以替换为非 1(即 0 或 2 或 3 或 4)。可以简单地替换随机值的指标:
inds_err <- round ( runif(N, 1, length(xmat)) )
如果我随机采样 0:4 值并用索引替换,这有时会用相同的值替换相同的值(0 与 0、1 与 1 等等)而不会产生错误。
errorg <- sample(0:4, length(inds_err), replace = TRUE)
xmat[inds_err] <- errorg
(2) 所以我想做的是在 xmat 中引入缺失值的错误,但是我不希望在上述步骤中生成的 NA 被替换为值(0 到 4)。所以ind_err 不应该是向量inds_miss 的成员。
总结规则:
(1) 缺失值不应替换为错误值
(2) 必须用不同的值替换现有值(这里是错误的定义)-在随机抽样中,这样做的概率为 1/5。
怎么做?我需要可以在我的大型数据集中使用的更快的解决方案。
【问题讨论】:
标签: r loops missing-data