【发布时间】:2021-09-06 06:39:02
【问题描述】:
我有一个大矩阵,n x m,其中 m - 不。列中,数据集称为数据。实际上,ncol 的范围可以从 80 到 200 列。
我想引入随机缺失的单元格值,例如每列中的 1%,使用
res<-do.call(cbind,lapply(lapply(data[,1:ncol(data)],function(x) data.frame(x)),function(x) x[sample(1:nrow(x),0.01*nrow(x)),]))
缺失的单元格将包含 NA,使用
data[,1][data[,1]%in%res[,1]]<- NA
其中 [,1] 是第 1 列。如果没有。 [ncol] 的列数为 5,我可以通过每次更改上述等式中的数字来手动完成。如果说有 50 列,这将非常耗时。如果 200 列或更多列....
我尝试使用 for/next 循环,即
ncol(data)
n = length(ncol(data))
for (i in 1:n)
{
data[,i][data[,i]%in%res[,i]]<- NA
}
但这不起作用 - 没有插入随机 NA。
我的问题 -
[1] 如何使用 for/next 循环在 n x m 矩阵中生成 0.1%、1% 和 5% 的随机 NA?
[2] 我毫不怀疑有一种更有效的方法可以做到这一点,但到目前为止我还没有运气。最好的方法是什么?
[3] 如果我采用手动方法,则列内容会根据需要进行更改。有没有办法保存更改的[即现在包含随机 NAs] n x m 矩阵?
【问题讨论】:
-
n = length(ncol(data))将始终返回 1,因为 ncol(data) 已经对列进行计数并返回一个整数。length()然后获取这个整数并返回 1...
标签: r for-loop matrix random na