我正在尝试建立一个完全由1和0组成的数据框。它应该是随机构建的,除了每个列需要累加一个指定值的事实。

如果这仅用于一个数据帧,我将知道如何执行此操作,但是需要将其内置到一个函数中,在该函数中将作为一个迭代过程完成,最大重复1000次。

最佳答案

一种有效的方法是将每列的适当数量的1和0改组为向量。您可以定义以下函数来生成一个矩阵,该矩阵具有指定的行数和每列中的1s数:

build.mat <- function(nrow, csums) {
  sapply(csums, function(x) sample(rep(c(0, 1), c(nrow-x, x))))
}
set.seed(144)
build.mat(5, 0:5)
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    0    0    0    0    1    1
# [2,]    0    0    0    1    0    1
# [3,]    0    0    0    0    1    1
# [4,]    0    1    1    1    1    1
# [5,]    0    0    1    1    1    1


要构建列表,可以对每个矩阵的所需列总和使用lapply

cslist <- list(1:3, c(4, 2))
set.seed(144)
lapply(cslist, build.mat, nrow=5)
# [[1]]
#      [,1] [,2] [,3]
# [1,]    0    1    1
# [2,]    0    0    0
# [3,]    0    0    0
# [4,]    0    1    1
# [5,]    1    0    1
#
# [[2]]
#      [,1] [,2]
# [1,]    0    0
# [2,]    1    0
# [3,]    1    1
# [4,]    1    0
# [5,]    1    1

09-06 12:30