每行和每列具有条件的随机值(0 和 1)
Random values (0 and 1) with condition on each row and each column
您好,我正在尝试在 R 中创建一个 600 行 18 列的数据框,但是:
-每行必须在 18 列中随机只有三个 1(例如 A、E、F 列为 1,其余为 0)
- 每列的总和必须等于 100
我真的被这个问题困住了:(
这是部分答案,列的总和为 100,但列不是随机的:
m <- matrix(nrow = 600, ncol = 18)
for (i in 0:5) {
a <- ((100 * i) + 1) : ((i + 1) * 100)
b <- ((3 * i) + 1) : ((i + 1) * 3)
m[a, b] <- 1
}
m <- m[sample(1:600, 600), ]
您可以使用 RaschSampler package 做到这一点。
它为具有固定边距的二进制 (0/1) 矩阵实现了 MCMC 采样器。对于 MCMC 采样器,需要一个初始值。
# initial matrix
M0 <- matrix(0, nrow=600, ncol=18)
M0[1:100,1:3] <- M0[101:200,4:6] <- M0[201:300,7:9] <-
M0[301:400,10:12] <- M0[401:500,13:15] <- M0[501:600,16:18] <- 1
# check margins
all(colSums(M0)==100)
all(rowSums(M0)==3)
# MCMCM sampler
library(RaschSampler)
sampling <- rsampler(M0)
# extract a sampled matrix (not the first one: this is M0)
M <- rsextrmat(sampling, mat.no = 2)
# check margins
all(colSums(M)==100)
all(rowSums(M)==3)
这个有效:
> # check margins
> all(colSums(M)==100)
[1] TRUE
> all(rowSums(M)==3)
[1] TRUE
您好,我正在尝试在 R 中创建一个 600 行 18 列的数据框,但是:
-每行必须在 18 列中随机只有三个 1(例如 A、E、F 列为 1,其余为 0) - 每列的总和必须等于 100
我真的被这个问题困住了:(
这是部分答案,列的总和为 100,但列不是随机的:
m <- matrix(nrow = 600, ncol = 18)
for (i in 0:5) {
a <- ((100 * i) + 1) : ((i + 1) * 100)
b <- ((3 * i) + 1) : ((i + 1) * 3)
m[a, b] <- 1
}
m <- m[sample(1:600, 600), ]
您可以使用 RaschSampler package 做到这一点。
它为具有固定边距的二进制 (0/1) 矩阵实现了 MCMC 采样器。对于 MCMC 采样器,需要一个初始值。
# initial matrix
M0 <- matrix(0, nrow=600, ncol=18)
M0[1:100,1:3] <- M0[101:200,4:6] <- M0[201:300,7:9] <-
M0[301:400,10:12] <- M0[401:500,13:15] <- M0[501:600,16:18] <- 1
# check margins
all(colSums(M0)==100)
all(rowSums(M0)==3)
# MCMCM sampler
library(RaschSampler)
sampling <- rsampler(M0)
# extract a sampled matrix (not the first one: this is M0)
M <- rsextrmat(sampling, mat.no = 2)
# check margins
all(colSums(M)==100)
all(rowSums(M)==3)
这个有效:
> # check margins
> all(colSums(M)==100)
[1] TRUE
> all(rowSums(M)==3)
[1] TRUE