nr <- 3
nc <- 4
rxc <- nr*nc
1)
m2 <- Matrix(0, nrow = nc, ncol = rxc, sparse = TRUE)
for (r in 1:nrow(m2)) {
m2[r,seq(r,rxc,nc)] <- 1
}
2)
m2 <- Matrix(0, nrow = nc, ncol = rxc, sparse = TRUE)
for (r in 1:nrow(m2)) {
m2[cbind(rep(r,(rxc/nc)),seq(r,rxc,nc))] <- 1
}
期望的输出
[1,] 1 . . . 1 . . . 1 . . .
[2,] . 1 . . . 1 . . . 1 . .
[3,] . . 1 . . . 1 . . . 1 .
[4,] . . . 1 . . . 1 . . . 1
这种方法都适用于小矩阵。我的矩阵将有1.2亿列和12行。在R中还有更好的方法吗?
答案 0 :(得分:0)
使用您的方法设置元素后,很容易发现1
元素的模式。例如,请看:
which(m2==1)
#[1] 1 6 11 16 17 22 27 32 33 38 43 48
或更好:
diff(which(m2==1))
#[1] 5 5 5 1 5 5 5 1 5 5 5
这种模式很容易重现:
m2<-Matrix(0, nrow = nc, ncol = rxc, sparse = TRUE)
indices<-c(1,cumsum(rep(c(rep(nrow(m2)+1,nrow(m2)-1),1),ncol(m2)/nrow(m2)))+1)
indices<-indices[1:(length(indices)-1)]
m2[indices]<-1