Convert a numeric matrix to data.table (or data.frame)

I hope there is a simple answer here, but I can’t find it anywhere.

I have a number matrix with labeled rows and columns:

1 2 3 4 a 6 7 8 9 b 8 7 5 7 c 8 5 4 1 d 1 6 3 2 

I would like for data.table (or data.frame, which I can convert) of the form:

  col row value 1 a 6 1 b 8 1 c 8 1 d 1 2 a 7 2 b 7 2 c 5 2 d 6 ... 

Any advice appreciated.

+9
r dataframe data.table reshape transformation
source share
3 answers

Use melt from reshape2:

 library(reshape2) #Fake data x <- matrix(1:12, ncol = 3) colnames(x) <- letters[1:3] rownames(x) <- 1:4 xm <- melt(x) xm Var1 Var2 value 1 1 a 1 2 2 a 2 3 3 a 3 4 4 a 4 ... 
+12
source share

The functions as.table and as.data.frame together will do this:

 > m <- matrix( sample(1:12), nrow=4 ) > dimnames(m) <- list( One=letters[1:4], Two=LETTERS[1:3] ) > as.data.frame( as.table(m) ) One Two Freq 1 a A 7 2 b A 2 3 c A 1 4 d A 5 5 a B 9 6 b B 6 7 c B 8 8 d B 10 9 a C 11 10 b C 12 11 c C 3 12 d C 4 
+16
source share

Assuming "m" is your matrix ...

 data.frame(col = rep(colnames(m), each = nrow(m)), row = rep(rownames(m), ncol(m)), value = as.vector(m)) 

This runs very quickly on a large matrix, and also shows you a little about how the matrix is ​​created, how to access things in it and how to create your own vectors.

+7
source share

All Articles