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