将矩阵重塑为数据框架

时间:2014-07-30 21:22:20

标签: r matrix

我有一个看起来像这样的关联矩阵文件(4行和3列)。

test=read.table("test.csv", sep=",", header=T)
head(test)
            LosAngeles   SanDiego    Seattle    
            1            2           3          
A    1      0.1          0.2         0.2        
B    2      0.2          0.4         0.2        
C    3      0.3          0.5         0.3        
D    4      0.2          0.5         0.1        

我想要的是将此矩阵文件重塑为数据框。结果看起来像这样(12(= 4 * 3)行和3列):

RowNum    ColumnNum    Value
1         1            0.1
2         1            0.2
3         1            0.3
4         1            0.2
1         2            0.2
2         2            0.4
3         2            0.5
4         2            0.5
1         3            0.2
2         3            0.2
3         3            0.3
4         3            0.1

也就是说,如果我的矩阵文件有100行和90列。我想创建包含9000(= 100 * 90)行和3列的新数据框文件。

我试过使用reshape包但是我似乎无法正确使用它。有什么建议如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

test <- as.matrix(read.table(text="
            1            2           3          
    1      0.1          0.2         0.2        
    2      0.2          0.4         0.2        
    3      0.3          0.5         0.3        
    4      0.2          0.5         0.1", header=TRUE)) 

data.frame(which(test==test, arr.ind=TRUE), 
                 Value=test[which(test==test)], 
                 row.names=NULL)
#   row col Value
#1    1   1   0.1
#2    2   1   0.2
#3    3   1   0.3
#4    4   1   0.2
#5    1   2   0.2
#6    2   2   0.4
#7    3   2   0.5
#8    4   2   0.5
#9    1   3   0.2
#10   2   3   0.2
#11   3   3   0.3
#12   4   3   0.1

答案 1 :(得分:1)

使用as.data.frame.table。老板:

m <- matrix(data = c(0.1, 0.2, 0.2,
                     0.2, 0.4, 0.2,
                     0.3, 0.5, 0.3, 
                     0.2, 0.5, 0.1),
            nrow = 4, byrow = TRUE, 
            dimnames = list(row = 1:4, col = 1:3))
m
#    col
# row   1   2   3
#   1 0.1 0.2 0.2
#   2 0.2 0.4 0.2
#   3 0.3 0.5 0.3
#   4 0.2 0.5 0.1

as.data.frame.table(m)
#    row col Freq
# 1    1   1  0.1
# 2    2   1  0.2
# 3    3   1  0.3
# 4    4   1  0.2
# 5    1   2  0.2
# 6    2   2  0.4
# 7    3   2  0.5
# 8    4   2  0.5
# 9    1   3  0.2
# 10   2   3  0.2
# 11   3   3  0.3
# 12   4   3  0.1