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

4

2 回答 2

1

plyr这是使用and的一种方法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
于 2013-04-18T07:32:56.923 回答
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
于 2016-03-02T12:59:17.377 回答