2011-11-23 54 views
2

我有两个矩阵,相同的大小,200万行和2列。 matrix_a有值,而matrix_b为空,matrix_b的值将由matrix_a中的值决定。如何在循环中设置矩阵的值?

matrix_b <- matrix(, nrow(matrix_a),2) 
for(rows in 1:nrow(matrix_a)){ 
    if (matrix_a[rows,1]==0){ 
     .....do something get values of x, 
     matrix_b[rows,2] = x 
     } 
    else { 
      do sth else get value of y, 
      then set matrix_b 
      } 
    } 

首先,我该如何加快这个循环,因为有2百万行,处理起来非常缓慢。 其次,我注意到当我试图从matrix_a复制一个值到matrix_b时,它似乎不起作用。例如,虽然在我的数据

matrix_a[1,1] = 'user1' 

后,我复制值

matrix_b[1,1] = matrix_a[1,1] 

然而,结果打开的

matrix_b[1,1]='1' 

怎么来的?为什么值'user1'未设置为matrix_b

我刚刚发现这可能与排序有关,因为我首先对数据进行排序以生成matrix_a。这里的值'1'表示排序后的第一行,但我仍然不知道它是如何在matrix_b中结束的。

+1

在“做某事”的时候看看应该做什么会很高兴。 – daroczig

+4

如果您在代码中放入了真正的东西,并且可能有5行数据显示您想要发生的情况,那么您会得到更好的答复。 – Henry

+1

你应该有'} else {'作为一行。否则R不会到达'else'。 – Henry

回答

2

如果两个“东西”和“东西 - 否则”可被封装到提供相同长度的矢量作为matrix_a[ ,1]功能,可以构建载体,sth_asth_b然后运行

matrix_b[ , 2] <- ifelse(matrix_a[ ,1] == 0, sth_a , sth_b)