将值分配给不同列的R -each行中的稀疏矩阵

时间:2015-03-07 19:17:36

标签: r matrix indexing

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中还有更好的方法吗?

1 个答案:

答案 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