R中的二进制矩阵,每列中有特定的矩阵

R中的二进制矩阵,每列中有特定的矩阵,r,R,如何在R中创建一个二进制矩阵,其中每行中只有一个1,但每列中有多少个1并不重要?我有这个脚本,但它正在创建一个随机矩阵。我想要的是指定行和列中的数字: mm <- matrix(0, 6, 5) apply(mm, c(1, 2), function(x) sample(c(0, 1), 1)) mm您可以对位置而不是其值进行采样 set.seed(42) t(apply(mm, 1, function(x) {x[sample(1:length(x), 1)] <- 1;x}))

如何在R中创建一个二进制矩阵,其中每行中只有一个1,但每列中有多少个1并不重要?我有这个脚本,但它正在创建一个随机矩阵。我想要的是指定行和列中的数字:

mm <- matrix(0, 6, 5)
apply(mm, c(1, 2), function(x) sample(c(0, 1), 1))

mm您可以对位置而不是其值进行采样

set.seed(42)
t(apply(mm, 1, function(x) {x[sample(1:length(x), 1)] <- 1;x}))
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    0    0    0    0
# [2,]    0    0    0    0    1
# [3,]    1    0    0    0    0
# [4,]    1    0    0    0    0
# [5,]    0    1    0    0    0
# [6,]    0    0    0    1    0
你也可以把它包装成一个函数

genBin <- function(n.row, n.col) t(replicate(n.row, sample(c(rep(0, n.col - 1), 1))))

set.seed(42)
genBin(6, 5)
# # output as one above

genBin这里我们创建一个函数,
foo
,它创建一个0和1的随机向量,只有一个1,长度与所需矩阵的列数相同。然后,复制这个nrows

nr <- 6; nc <- 5
foo <- function() sample(c(1, rep(0, nc-1)), nc)
t(replicate(nr, foo()))
i
j
指定矩阵中非零项的位置。因此,我们可以使用
sample(1:n)
指定它们,其中
n
是平方矩阵的行数和列数

set.seed(1234) # For reproducibility. Omit in reality.
A <- sparseMatrix(i=sample(1:4), j=sample(1:4))
# 4 x 4 sparse Matrix of class "ngCMatrix"          
# [1,] . | . .
# [2,] . . | .
# [3,] | . . .
# [4,] . . . |

请提供更多信息,以便其他人能够为您提供答案。此链接将有助于重新措辞和改进您的问题。这也是为了提供可重复的问题,为什么需要
t
transpose?@Edward-42一次这么好。非常感谢你们,但知道如果我希望每列中至少有一个,那么不要转换结果。或者你的意思是每行每列一个?我的意思是,我希望每列至少有一个1,每行正好有一个1!那么矩阵就必须是正方形。我会更新我的答案。。。
library(Matrix)
args(sparseMatrix)
# function (i = ep, j = ep, p, x, dims, dimnames, symmetric = FALSE, 
#     triangular = FALSE, index1 = TRUE, giveCsparse = TRUE, check = TRUE, 
#     use.last.ij = FALSE)
set.seed(1234) # For reproducibility. Omit in reality.
A <- sparseMatrix(i=sample(1:4), j=sample(1:4))
# 4 x 4 sparse Matrix of class "ngCMatrix"          
# [1,] . | . .
# [2,] . . | .
# [3,] | . . .
# [4,] . . . |
as.matrix(A) * 1
     [,1] [,2] [,3] [,4]
[1,]    0    1    0    0
[2,]    0    0    1    0
[3,]    1    0    0    0
[4,]    0    0    0    1