替换采样子集中的值

时间:2013-05-14 21:56:26

标签: r sample replace

我有一个2000人的数据集。其中330个人缺少我称为y.n.17(培养结果)的载体数据。我想用“1”替换330缺失(NA)值中的17个,表明结果是积极的文化。

这是我尝试使用的代码行:

y.n.17[sample(is.na(y.n.17),17)]=1

似乎每100个人替换17个“1”,无论他们是否是NA! 我做错了什么?

1 个答案:

答案 0 :(得分:1)

ny.n.17的长度,m < n为该向量中NA的数量。 is.na(y.n.17)是一个长度为n的布尔矢量,包含m TRUEn-m FALSE。当您通过sample(is.na(y.n.17),17)从该向量进行采样时,您将获得一个随机选择的17TRUE长度为FALSE的向量。很可能是很多FALSE,也许只有一个TRUE。执行y.n.17[sample(is.na(y.n.17),17)]=1时,会回收长度为17的向量,以便定期插入1 ...

你的意思是:

na.idx      <- which(is.na(y.n.17))
replace.idx <- head(sample(na.idx), 17)
y.n.17[replace.idx] <- 1

注意:执行head(sample(na.idx), 17)通常比sample(na.idx, 17)更强大,因为当数据少于17 NA时它也会有效。但是,如果您希望代码在错误情况下出错,请执行y.n.17[sample(which(is.na(y.n.17)), 17)] <- 1