在R中,我有一个包含9个命名列的数据框,用于描述实验数据。第一列包含基因名称,下面8列包含基因表达值。最终目标是根据表达式值的标准差对数据帧进行排序。
基本上,我想计算第2列到第9列的标准差,并根据这些值对整个数据帧进行排序。我该怎么做呢?
我的第一个想法是使用标准差添加第十列,使用sd()函数计算,然后对表进行排序,最后再次删除第十列。但我想不出该怎么做。
发布于 2011-10-26 16:37:58
关键命令是:apply、order和一些行重新排列。
##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发布于 2018-01-23 13:41:45
这是计算列标准差的最快、最短的方法:
colSds = sqrt(diag(cov(data_matrix)))由于协方差矩阵的对角线由每个变量的方差组成,因此我们执行以下操作:
使用cov
diag
sqrt计算对角线的平方根,以获得标准差然后,您可以使用colSds[column_index]来获取特定的列sd。
https://stackoverflow.com/questions/7900349
复制相似问题