# converting a data frame into a matrix

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
```
```