如何用需要满足条件的随机值填充矩阵?

时间:2020-07-14 14:41:44

标签: r

我有以下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。我该怎么做? 感谢您的帮助!

2 个答案:

答案 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。

相关问题