2013-04-18 5 views
2

У меня есть результаты от tapply функции, которая создает массив (с именами модулей, именами животных (строки) и тестовые днями (столбцы)) как этогопреобразование многомерного массива в учтенный кадр данных

,, module1 
    [,D1] [,D2] [,D3] [,D4] 
[A1,] 1 3 2 1 
[A2,] 2 1 3 2 

,, module3 
    [,D1] [,D2] [,D3] [,D4] 
[A1,] 1 3 2 1 
[A2,] 2 1 3 2 

,, module3 
    [,D1] [,D2] [,D3] [,D4] 
[A1,] 1 3 2 1 
[A2,] 2 1 3 2 

Что Я хотел бы превратить его в кадр данных, где имя модуля и имена измерений являются факторами в кадре данных, таких, как это:

Module1 D1 A1 1 
Module1 D1 A2 2 
Module1 
.. 
Module3 D4 A1 1 
Module3 D4 A2 2 
etc 

что я могу затем использовать для ggplot и других функций. Есть ли упакованная/функция, которая позволяет мне это делать?

+0

Почему вы отметили этот вопрос 'ggplot2'? – Arun

ответ

1

Вот один из способов использования plyr и reshape2:

adply(a, 3, function(x) melt(cbind(names=rownames(x), as.data.frame(x)))) 
#   X1 names variable value 
# 1 module1 A1  D1  1 
# 2 module1 A2  D1  2 
# 3 module1 A1  D2  3 
# 4 module1 A2  D2  1 
# 5 module1 A1  D3  2 
# 6 module1 A2  D3  3 
# 7 module1 A1  D4  1 
# 8 module1 A2  D4  2 
# 9 module2 A1  D1  1 
# 10 module2 A2  D1  2 
# 11 module2 A1  D2  3 
# 12 module2 A2  D2  1 
# 13 module2 A1  D3  2 
# 14 module2 A2  D3  3 
# 15 module2 A1  D4  1 
# 16 module2 A2  D4  2 
# 17 module3 A1  D1  1 
# 18 module3 A2  D1  2 
# 19 module3 A1  D2  3 
# 20 module3 A2  D2  1 
# 21 module3 A1  D3  2 
# 22 module3 A2  D3  3 
# 23 module3 A1  D4  1 
# 24 module3 A2  D4  2 
+0

Отлично, большое вам спасибо, по какой-то причине мне пришлось включить {} в бит функции ... но он работает! – user2270140

1

Использование as.data.frame.table. Его начальник:

a0 <- array(1:3, dim = c(2,4,3), 
      dimnames = list(paste0("A", 1:2), paste0("D", 1:4), paste0("module", 1:3))) 
a0 
# , , module1 

# D1 D2 D3 D4 
# A1 1 3 2 1 
# A2 2 1 3 2 

# , , module2 

# D1 D2 D3 D4 
# A1 3 2 1 3 
# A2 1 3 2 1 

# , , module3 

# D1 D2 D3 D4 
# A1 2 1 3 2 
# A2 3 2 1 3 


df0 <- as.data.frame.table(a0) 
head(df0) 
# Var1 Var2 Var3 Freq 
# 1 A1 D1 module1 1 
# 2 A2 D1 module1 2 
# 3 A1 D2 module1 3 
# 4 A2 D2 module1 1 
# 5 A1 D3 module1 2 
# 6 A2 D3 module1 3 
Смежные вопросы