本文介绍了随机值(0 和 1),每行和每列都有条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在 R 中创建一个 600 行和 18 列的数据框:

Hi I am trying to create a dataframe of 600 rows and 18 columns in R BUT:

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

-each row has to have only three 1's randomly in the 18 columns (for example column A,E,F with 1 and the rest with 0's)-the sum of each column has to be equal to 100

我真的被这个问题困住了:(

I am really stuck with this problem :(

推荐答案

您可以使用 RaschSampler 包.

它为具有固定边距的二进制 (0/1) 矩阵实现了 MCMC 采样器.对于 MCMC 采样器,需要一个初始值.

It implements a MCMC sampler for binary (0/1) matrices with fixed margins. For a MCMC sampler, an initial value is required.

# 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

这篇关于随机值(0 和 1),每行和每列都有条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 16:24