2011-11-23 36 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)