代码之家  ›  专栏  ›  技术社区  ›  James Thompson

如何将tapply()的输出转换为data.frame

  •  19
  • James Thompson  · 技术社区  · 15 年前

    R中有一个data.frame,如下所示:

          score    rms  template   aln_id       description
    1  -261.410  4.951 2f22A.pdb  2F22A_1 S_00001_0000002_0
    2  -231.987 21.813 1wb9A.pdb  1WB9A_4 S_00002_0000002_0
    3  -263.722  4.903 2f22A.pdb  2F22A_3 S_00003_0000002_0
    4  -269.681 17.732 1wbbA.pdb  1WBBA_6 S_00004_0000002_0
    5  -258.621 19.098 1rxqA.pdb  1RXQA_3 S_00005_0000002_0
    6  -246.805  6.889 1rxqA.pdb 1RXQA_15 S_00006_0000002_0
    7  -281.300 16.262 1wbdA.pdb 1WBDA_11 S_00007_0000002_0
    8  -271.666  4.193 2f22A.pdb  2F22A_2 S_00008_0000002_0
    9  -277.964 13.066 1wb9A.pdb  1WB9A_5 S_00009_0000002_0
    10 -261.024 17.153 1yy9A.pdb  1YY9A_2 S_00001_0000003_0
    

    我可以计算data.frame上的摘要统计信息,如下所示:

    > tapply( d$score, d$template, mean )
    1rxqA.pdb 1wb9A.pdb 1wbbA.pdb 1wbdA.pdb 1yy9A.pdb 2f22A.pdb 
    -252.7130 -254.9755 -269.6810 -281.3000 -261.0240 -265.5993 
    

    有没有一种简单的方法将这个输出强制回到data.frame中?我希望它有以下两列:

    d$template
    mean
    

    3 回复  |  直到 15 年前
        1
  •  9
  •   Collin    15 年前
    library(plyr)
    ddply(d, "template", summarise, mean = mean(score))
    
        2
  •  32
  •   Easymode44    7 年前

    有很多不同的方法来转换 塔普利 调用data.frame。

    但这要简单得多 呼叫 塔普利 首先,将其替换为对类似函数的调用,该函数返回 数据帧

    更具体地说:

    • 返回一个向量

    • 骨料

    把函数调用从 塔普利 骨料

    data(iris)     # in 'datasets' just call 'data' and pass in 'iris' as an argument
    
    tx = tapply(iris$Sepal.Length, list(iris$Species), mean)
    # returns: versicolor  virginica 
                 5.94       6.59 
    
    class(tx)
    # returns: vector
    
    tx = aggregate(iris$Sepal.length, list(iris$Species), mean)
    # returns:
             Group.1    x
         1 versicolor 5.94
         2  virginica 6.59
    
    
    class(tx)
    # returns: data.frame
    
        3
  •  14
  •   teucer    15 年前

    你可以试试这个:

    mn <- tapply(d$score,d$template,mean)
    df <- data.frame(template=names(mn),mean=mn)