我有以下R代码:
mat <- matrix(0L,500,10)
for(i in 1:500){
mat[i,] <- rnorm(10,0,1)
}
mat <- mat[mat[,10] >=-0.5,]
dim(mat)
我不想让我的第十列的值低于-0.5。但是,我仍然希望有一个包含500行的矩阵。因此,我必须遍历for循环,直到dim(mat)[1] =500。我该怎么做? 感谢您的帮助!
答案 0 :(得分:1)
您可以一步一步初始化矩阵,而无需使用循环:
mat <- matrix(rnorm(500*10,0,1), 500, 10)
然后,使用while循环,通过对正态分布进行采样,直到所有它们都大于或等于-0.5
来替换第十列中0.5
以下的值:
while (sum(mat[, 10] < -0.5)) {
mat[mat[, 10] < -0.5, 10] <- rnorm(sum(mat[, 10] < -0.5), 0, 1)
}
答案 1 :(得分:0)
使用base r,您可以尝试这种方法。
首先使用500行和10列的随机法线值创建一个矩阵:
mat <- matrix(rnorm(500, 0, 1), nrow = 500, ncol = 10)
然后从第十列中删除-0.5以下的值:
mat[which(mat[, 10] < -0.5), 10] <- NA
根据需要用其他值替换NA。