Generate a random matrix in R with m columns and n rows where rows sum to 1

前端 未结 4 2005
粉色の甜心
粉色の甜心 2021-01-15 18:56

I want to generate an nxm matrix. Suppose its 100x3. I want each row to sum to 1 (so two \"0\"\'s and one \"1\").

sample(c(0,0,1),3) 

will

4条回答
  •  攒了一身酷
    2021-01-15 19:16

    No loops, no transposition. Just create a matrix of zeros and replace one entry per row with 1 by sampling the rows.

    m <- matrix(0, 100, 3)
    nr <- nrow(m)
    m[cbind(1:nr, sample(ncol(m), nr, TRUE))] <- 1
    
    all(rowSums(m) == 1)
    # [1] TRUE
    

提交回复
热议问题