我在R. 800个样本中有一组数据,在10到20之间随机生成12个观察值。从这里我有两个选项,如果随机生成的数字小于15,那么选择是选项1及以上15,它的选项B.现在我想从其均值和sd生成一组数据,作为选项A为真的正态分布。
Run1 <- replicate(800, rnorm(12, mean=16, sd=3.1))
我不知道如何链接我的另一段代码,说明选项A是否为TRUE,从而为Run1生成一个值?
编辑:对于上面的参数,我基本上目前有一个包含TRUE和FALSE的矩阵(选项A - 均值= 16,sd = 3.1和选项B - 均值= 18,sd = 3.3)其中A对于低于15的值为TRUE,对于高于15的值为FALSE。因此得到这样的矩阵(只是一小部分全矩阵样本)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] TRUE TRUE FUE FUE FALSE FALSE BLUE [2,] TRUE TRUE FALSE FALSE TRUE TRUE
所以我现在想要的是两个矩阵(一个用于A,一个用于B),它提供一个平均值,其中A是从上面详述的选项A值的正态分布的A为真(矩阵A)和B的平均值其中FALSE(矩阵B)来自上面详述的选项B值的正态分布,理想情况下具有N / A或类似值,其中不应在相应的矩阵中生成值。
然后最后我还要将这两个矩阵组合起来形成第三个最终矩阵。可能看起来很麻烦,但却是必要的。
由于
答案 0 :(得分:1)
一种方法是构造一个正确大小的矩阵,然后使用行索引将值填充到适当的行中......
set.seed(101)
runifvals <- runif(800,10,20)
result <- matrix(nrow=800,ncol=12)
lowvals <- runifvals<=15
## sum(lowvals) is the number of rows of data we have to generate for case A ...
result[lowvals,] <- rnorm(sum(lowvals)*12, 16,3.1)
result[!lowvals,] <- rnorm(sum(!lowvals)*12,18,3.3)
这假设可以将结果作为800x12矩阵(但这可能是最方便的格式)。
编辑如果你真的想要两个带嵌入式NA的单独矩阵(这看起来很奇怪/浪费,但不管...... ):
matA <- matB <- matrix(NA,nrow=800,ncol=12)
matA[lowvals,] <- rnorm(sum(lowvals)*12, 16,3.1)
matB[!lowvals,] <- rnorm(sum(!lowvals)*12,18,3.3)