将数据帧转换为矩阵

时间:2014-06-03 08:48:29

标签: r matrix

我有一个这样的数据框:

         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

我想将此数据框转换为矩阵。在此矩阵中,V2应为行,V1应为列

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

我怎么能在r?

中这样做

3 个答案:

答案 0 :(得分:4)

假设你的矩阵有连续的值(即矩阵中没有间隙)并且值的运行顺序是连续的(即row1; columns1:10,row2; columns1:10 ......等),那么......

获取相应列中的值(在您的情况下为V3)并根据矩阵大小的参数重新整形...

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

如果您需要匹配这些值(即运行顺序不连续),那么您可以利用矢量化矩阵下标,如此......

#  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

答案 1 :(得分:1)

你需要做两件事:

  1. 重新排列列
  2. 转置(使用t功能)
  3. 首先创建一些示例数据

    d = data.frame(V1=runif(5), V2= 5+runif(5), V3 = 10+runif(5))
    

    然后

    t(d[, ncol(d):1])
    

    t(d)[ncol(d):1, ]
    

答案 2 :(得分:0)

这应该可以胜任(df是你的数据框)

m <- do.call(cbind, df)