2017-02-03 5 views
0

Это может показаться относительно простым, но я пытаюсь изменить данные из фрейма данных в матрицу, поскольку я работаю с новым пакетом D3 chorddiag. Прежде чем я использовал circlize и зависел от использования возможностей dataframe. Похоже, что Chorddiag полагается исключительно на матрицы, поэтому мне интересно, как прыгать через типы. Ниже приведен пример:Как преобразовать данные из кадра/datatable в матрицу в R для диаграммы аккордов?

library(circlize) 
library(chorddiag) 
from = c("A", "A", "A", "A", "B", "B", "C", "C", "D") 
to = c("B", "C", "D", "J", "E", "F", "G", "H", "I") 
value = c(5,8,2,5,5,6,7,8,11) 
food = data.frame(from, to, value) 
food 
chordDiagram(food) 


#now in chordiag how to transform into matrix like m? 
m <- matrix(c(11975, 5871, 8916, 2868, 
       1951, 10048, 2060, 6171, 
       8010, 16145, 8090, 8045, 
       1013, 990, 940, 6907), 
      byrow = TRUE, 
      nrow = 4, ncol = 4) 
groupnames <- c("black", "blonde", "brown", "red") 
row.names(m) <- groupnames 
colnames(m) <- groupnames 
chorddiag(m) 

Как изменить пищу, чтобы она напоминала m? Я подумал, может быть что-то вроде ниже, но я не уверен, как добавить имена в Цените помощь

matrix(data = food$value, nrow = length(food$from), ncol = length(food$to), byrow = TRUE 
     #,dimnames = 
     ) 
+0

'xtabs (value ~., Food)'? – alistaire

ответ

0

Как ваш пример:.

> food_matrix <- matrix(data = food$value, nrow = length(food$from), ncol = length(food$to), byrow = TRUE) 
> food_matrix 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] 
[1,] 5 8 2 5 5 6 7 8 11 
[2,] 5 8 2 5 5 6 7 8 11 
[3,] 5 8 2 5 5 6 7 8 11 
[4,] 5 8 2 5 5 6 7 8 11 
[5,] 5 8 2 5 5 6 7 8 11 
[6,] 5 8 2 5 5 6 7 8 11 
[7,] 5 8 2 5 5 6 7 8 11 
[8,] 5 8 2 5 5 6 7 8 11 
[9,] 5 8 2 5 5 6 7 8 11 

Теперь мы называем строки и столбцы вашего матрица с rownames() и colnames()

> rownames(food_matrix) <- food$from 
> colnames(food_matrix) <- food$to 
> food_matrix 
    B C D J E F G H I 
A 5 8 2 5 5 6 7 8 11 
A 5 8 2 5 5 6 7 8 11 
A 5 8 2 5 5 6 7 8 11 
A 5 8 2 5 5 6 7 8 11 
B 5 8 2 5 5 6 7 8 11 
B 5 8 2 5 5 6 7 8 11 
C 5 8 2 5 5 6 7 8 11 
C 5 8 2 5 5 6 7 8 11 
D 5 8 2 5 5 6 7 8 11` 

Это выход вы искали?

+0

Это прекрасно, я был близок! спасибо – LoF10