r - 如何将tapply()的输出放入data.frame中

标签 r statistics

我在 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

我喜欢tapply,但现在我正在将tapply 的结果剪切并粘贴到文本文件中,并对它进行一些修改,以获得我想要的具有适当名称的摘要统计信息。这感觉很不对劲,我想做点更好的事情!

最佳答案

有很多不同的方法可以将 tapply 调用的输出转换为 data.frame。

但是,首先避免调用tapply并用调用返回数据帧<的类似函数来代替它要简单得多/em> 而不是向量:

更具体地说:

  • tapply 返回一个向量

  • 聚合返回数据框

所以只需将函数调用从tapply更改为aggregate,如下所示:

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

关于r - 如何将tapply()的输出放入data.frame中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2618248/

相关文章:

r - 生成随机字符串

r - 使用神经网络功能时出现错误

algorithm - 关联词接近度

r - 带有 lapply 和 sapply 的日期

r - 如何只为 ggplot2 中的轴设置一个限制?

r - 总结 3 个独特领域的最新分数

r - 如何在ggplot2中将y轴标题(不是标签)旋转为水平

SQL:如何获得每个数据库或每小时或...的执行查询数?

r - 是否有用于访问 Google Docs 的良好 R API?

python - 通过超几何分析对 p 值进行 Bonferroni 校正