将名称矩阵转换为Dataframe行

时间:2016-07-19 15:59:48

标签: r matrix dataframe

假设我有一个矩阵mat,它有列名和行名:

mat <- matrix(1:25, ncol = 5)
rownames(mat) <- LETTERS[1:5]
colnames(mat) <- LETTERS[6:10]

^^制作以下矩阵的简单且可重复的示例:

     F  G  H  I  J
   A 1  6 11 16 21
   B 2  7 12 17 22
   C 3  8 13 18 23
   D 4  9 14 19 24
   E 5 10 15 20 25

我需要将此矩阵转换为如下所示的数据框:

ROWNAME   COLNAME    VALUE
   A        F          1
   B        F          2
   C        F          3
       ......

是否有内置功能来执行此操作?我该如何解决这个问题。

此外,此矩阵将是众多矩阵中的一个,因此需要添加Matrix Name列,以便它可以解析多个矩阵并创建一个实际为4列且具有多个观察值的data.frame作为所有矩阵中的值的组合。如果有任何这些步骤的快捷方式,我们将不胜感激。

4 个答案:

答案 0 :(得分:3)

使用Sub Worksheet_SelectionChange(ByVal Target As Range) Row = Target.Row Column= "E" Path= Range(Column & Row) If Target.Column = "5" Then Shell """" & Environ("ProgramFiles") & "\Adobe\Acrobat Reader 2015\Reader\AcroRd32.exe"" /A ""page=2"" """ & Path & """", vbNormalFocus End If End Sub

tidyr

使用mat <- matrix(1:25, ncol = 5) rownames(mat) <- LETTERS[1:5] colnames(mat) <- LETTERS[6:10] mat <- as.data.frame(mat) mat$ROWNAME <- rownames(mat) library(tidyr) mat %>% gather(COLNAME, VALUE, F:J) ROWNAME COLNAME VALUE 1 A F 1 2 B F 2 3 C F 3 4 D F 4 5 E F 5 6 A G 6 7 B G 7 ...

data.table

答案 1 :(得分:2)

试试这个

df = expand.grid(rownames(mat),colnames(mat))
df$val = as.vector(mat)

答案 2 :(得分:2)

您可以使用melt

library(reshape2)
melt(mat)
head(setNames(melt(mat), c("ROWNAME", "COLNAME", "VALUE")))
#   ROWNAME COLNAME VALUE
# 1       A       F     1
# 2       B       F     2
# 3       C       F     3
# 4       D       F     4
# 5       E       F     5
# 6       A       G     6

答案 3 :(得分:1)

我们可以在没有任何包的情况下做到这一点我们复制了rownamescolnames以及'mat'的元素并创建了data.frame

data.frame(ROWNAME = rownames(mat)[row(mat)], 
           COLNAME = colnames(mat)[col(mat)], 
           VALUE = c(mat))
#   ROWNAME COLNAME VALUE
#1        A       F     1
#2        B       F     2
#3        C       F     3
#4        D       F     4
#5        E       F     5
#6        A       G     6
#7        B       G     7
#8        C       G     8
#9        D       G     9
#10       E       G    10
#11       A       H    11
#12       B       H    12
#13       C       H    13
#14       D       H    14
#15       E       H    15
#16       A       I    16
#17       B       I    17
#18       C       I    18
#19       D       I    19
#20       E       I    20
#21       A       J    21
#22       B       J    22
#23       C       J    23
#24       D       J    24
#25       E       J    25

或者如果我们需要更快的方法,使用Matrix的选项将是

library(Matrix)
summary(Matrix(mat, sparse=TRUE))