[R] Generate Binary Matrix

David Carlson dcarlson at tamu.edu
Wed Apr 9 23:33:10 CEST 2014

You could randomly assign 1 to a single column in each row and
then use binomial draws on the remaining 0's:

> set.seed(42)
> dimMat <- matrix(0, 1000, 4)
> dimMat[cbind(1:1000, sample.int(4, 1000, replace=TRUE))] <- 1
> dimMat[dimMat<1] <- sample(0:1, 3000, replace=TRUE, prob=c(.6,
> table(rowSums(dimMat))

  1   2   3   4 
217 402 310  71 
> colSums(dimMat)
[1] 551 586 533 565
> sum(dimMat)
[1] 2235

David L Carlson
Department of Anthropology
Texas A&M University
College Station, TX 77840-4352

-----Original Message-----
From: r-help-bounces at r-project.org
[mailto:r-help-bounces at r-project.org] On Behalf Of Doran, Harold
Sent: Wednesday, April 9, 2014 3:56 PM
To: r-help at r-project.org
Subject: [R] Generate Binary Matrix

I am trying to generate a binary matrix where every row in the
matrix is guaranteed to have at least one 1. Ideally, I would
like most rowSums  to be equal to 2 or 3 with some 1s and some
4s. But, rowSums cannot be equal to 0.

I can tinker with the vector of probability weights, but in
doing so (in the way I am doing it) this causes for more rowSums
to be equal to 4 than I ideally would like, but this never helps
to guarantee a rowSum will not be equal to 0. I could post-hoc
tinker with any rows that are all 0, but seems like that may be
just inefficient.

Below is sample code, any ideas on how to best tackle this?


dimMat <- matrix(0, 1000, 4)
for(i in 1:1000){
                dimMat[i, ] <- sample(c(0,1), 4, replace = TRUE,
prob = c(.3, .7))


	[[alternative HTML version deleted]]

R-help at r-project.org mailing list
PLEASE do read the posting guide
and provide commented, minimal, self-contained, reproducible

More information about the R-help mailing list