我有一个2000人的数据集。其中330个人缺少我称为y.n.17(培养结果)的载体数据。我想用“1”替换330缺失(NA)值中的17个,表明结果是积极的文化。
这是我尝试使用的代码行:
y.n.17[sample(is.na(y.n.17),17)]=1
似乎每100个人替换17个“1”,无论他们是否是NA! 我做错了什么?
答案 0 :(得分:1)
让n
为y.n.17
的长度,m < n
为该向量中NA
的数量。 is.na(y.n.17)
是一个长度为n
的布尔矢量,包含m
TRUE
和n-m
FALSE
。当您通过sample(is.na(y.n.17),17)
从该向量进行采样时,您将获得一个随机选择的17
或TRUE
长度为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
。