首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据某些列的标准差对R数据框进行排序?

如何根据某些列的标准差对R数据框进行排序?
EN

Stack Overflow用户
提问于 2011-10-26 16:32:02
回答 2查看 2.1K关注 0票数 2

在R中,我有一个包含9个命名列的数据框,用于描述实验数据。第一列包含基因名称,下面8列包含基因表达值。最终目标是根据表达式值的标准差对数据帧进行排序。

基本上,我想计算第2列到第9列的标准差,并根据这些值对整个数据帧进行排序。我该怎么做呢?

我的第一个想法是使用标准差添加第十列,使用sd()函数计算,然后对表进行排序,最后再次删除第十列。但我想不出该怎么做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-26 16:37:58

关键命令是:applyorder和一些行重新排列。

代码语言:javascript
复制
##Create some dummy data
##You should always try and include some test data in your questions
R> dd = as.data.frame(matrix(rnorm(80), ncol=8))
R> dd = cbind(GENE = LETTERS[1:10], dd)
R> head(dd, 2)
   GENE    V1     V2      V3      V4      V5     V6      V7      V8
 1    A 1.693 1.2977  1.2220  0.4877 -1.7076 1.7796  0.7980 0.08643
 2    B 1.987 0.1545 -0.2173 -0.5959  0.7274 0.2757 -0.5391 0.56054

##Work out the sd for columns 2 to 9 using apply
##Use "order" to reorder the rows
R> dd1 = dd[order(apply(dd[,2:9], 1, sd)),]
##Check the new order
R> apply(dd1[,2:9], 1, sd)
     8      7      5      9      2      1      4      6     10      3 
0.5197 0.7128 0.8149 0.8210 0.8624 0.8808 0.9804 1.2058 1.5086 1.6191 
R> head(dd1, 2)
  GENE      V1      V2     V3      V4      V5      V6       V7       V8
8    H -0.3869  0.6206  0.279 -0.3867 -0.4915 -1.0979 -0.07696 -0.09097
7    G -1.2966 -1.1279 -1.082 -0.4739  0.2717 -0.1365  0.38614  0.38445
票数 4
EN

Stack Overflow用户

发布于 2018-01-23 13:41:45

这是计算列标准差的最快、最短的方法:

代码语言:javascript
复制
colSds = sqrt(diag(cov(data_matrix)))

由于协方差矩阵的对角线由每个变量的方差组成,因此我们执行以下操作:

使用cov

  • Extract计算协方差矩阵,使用diag

  • Take计算矩阵的对角线,使用sqrt计算对角线的平方根,以获得标准差

然后,您可以使用colSds[column_index]来获取特定的列sd

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7900349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档