每行和每列都有条件的随机值(0和1)

时间:2018-07-17 10:04:54

标签: r random sample

嗨,我正在尝试在R BUT中创建600行18列的数据框:

-每行在18列中必须随机只有三个1(例如,A,E,F的列为1,其余的为0) -每列的总和必须等于100

我真的很困扰这个问题:(

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

这是部分答案,列的总和为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), ]