首页 > 解决方案 > 如何制作一个矩阵,每行只有两个数值,其他地方有 NA?

问题描述

我正在尝试创建一个模拟矩阵/数据框,其中每行包含两个数值,其他任何地方都包含 NA。我试图模拟一个有 5 个因素(列)的资金分配实验,在其中 2 个因素之间,受试者必须分配他们的钱。

前三行如下所示:

NA NA 30 NA 70
25 NA NA 75 NA
60 40 NA NA NA
...

我设想100行左右。行总数应始终为 100。

标签: rdataframematrix

解决方案


您可以执行以下操作:

set.seed(5)

# Create matrix of NAs

m <- matrix(ncol = 5, nrow = 5)

nr <- nrow(m)
nc <- ncol(m)

# Create replacement indices (two unique row indices)
idx <- cbind(rep(sequence(nr), each = 2), c(replicate(nr, sample(nc, 2, replace = FALSE))))

# Create replacement values
vals <- c(replicate(nc, c({x <- sample(100, 1)}, 100 - x)))

m[idx] <- vals  

m
     [,1] [,2] [,3] [,4] [,5]
[1,]   NA   28   72   NA   NA
[2,]   NA   50   NA   NA   50
[3,]   32   NA   68   NA   NA
[4,]   NA   NA   56   44   NA
[5,]   73   NA   NA   NA   27

推荐阅读