将多维数组转换为因式数据帧

时间:2013-04-18 07:24:58

标签: arrays r dataframe transform

我有一个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和其他功能。 是否有打包/功能让我这样做?

2 个答案:

答案 0 :(得分:1)

以下是使用plyrreshape2的一种方式:

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

答案 1 :(得分: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