我有一个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 :(得分: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
答案 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