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

前端 未结 4 2008
粉色の甜心
粉色の甜心 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:34

    Since you want single 1 for a row, the problem can be restated to select a column entry randomly that has 1 for each row.

    So you can do like,

    m <- 3; n<-100    
    rand_v <- floor(runif(n)*3)+1
    mat <- matrix(0,n,m)
    idx <- cbind(1:n,rand_v)
    mat[idx] <- 1
    

    Hope this helps.

提交回复
热议问题