converting a data frame into a matrix

advertisements

I have a data frame like this:

         V1 V2        V3
    1    1  1 0.0000000
    2    2  1 1.6646331
    3    3  1 1.6649136
    4    4  1 1.7420642
    5    5  1 1.4441743
    6    6  1 0.7544465
    7    7  1 1.9796860
    8    8  1 1.0744425
    9    9  1 2.1503288
    10  10  1 1.0408388
    11  11  1 2.0822162
    ....
    841 29 29 0.0000000

I want to convert this data frame to a matrix. In this matrix V2 should be the row and V1 should be column

    [1]         [2]        [3]        [4] ....
[1]  0.0000000  1.6646331  1.664936    1.7420642...

How can I do that in r?


Assuming you have contiguous values for your matrix (i.e. no gaps in the matrix) and the running order of values is continuous (i.e. row1;columns1:10,row2;columns1:10... etc), then....

Take the values in the appropriate column (V3 in your case) and reshape them according to your paramters of matrix size...

m <- matrix( df$V3 , ncol = max(df$V1) , nrow = max(df$V2) , byrow = TRUE )
#[,1]     [,2]     [,3]     [,4]     [,5]      [,6]     [,7]     [,8]     [,9]    [,10]    [,11]
#[1,]    0 1.664633 1.664914 1.742064 1.444174 0.7544465 1.979686 1.074442 2.150329 1.040839 2.082216

If you need to match the values (i.e. running order is not continuous) then you can take advantage of vectorised matrix subscripting like so....

#  Create empty matrix
m <- matrix( NA, ncol = max(df$V1) , nrow = max(df$V2) )
#  Then fill with values at defined locations
m[ cbind( df$V2 , df$V1 ) ] <- df$V3