【问题标题】:Transform multi dimensional array into factored data frame将多维数组转换为因子数据框
【发布时间】:2013-04-11 05:03:13
【问题描述】:

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

【问题讨论】:

  • 你为什么用ggplot2标记这个问题?

标签: arrays r dataframe transform


【解决方案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

【讨论】:

    【解决方案2】:

    这是使用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
    

    【讨论】:

    • 太好了,非常感谢,由于某种原因,我不得不在函数位中包含 {}...但它有效!
    猜你喜欢
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2019-06-29
    相关资源
    最近更新 更多