使用科学记数法时,rank()没有正确排名

时间:2010-10-22 17:38:31

标签: r

我试图订购csv文件,但是rank()函数对带有-E表示法的数字表现得很奇怪。

> comparison = read.csv("e:/thesis/comparison/output.csv", header=TRUE)  
> comparison$proxygeneld_full.txt[0:20]
[1] 9.34E-07    4.04E-06    4.16E-06    7.17E-06    2.08E-05    3.00E-05   
[7] 3.59E-05    4.16E-05    7.75E-05    9.50E-05    0.0001116   0.00012452 
[13] 0.00015494  0.00017892  0.00017892  0.00018345  0.0002232   0.000231775
[19] 0.00023241  0.0002666  
13329 Levels: 0.0001116 0.00012452 0.00015494 0.00017892 0.00018345 ... adjP
> rank(comparison$proxygeneld_full.txt[0:20])
[1] 19.0 14.0 16.0 17.0 11.0 12.0 13.0 15.0 18.0 20.0  1.0  2.0  3.0  4.5  4.5
[16]  6.0  7.0  8.0  9.0 10.0 
#It should be 1-20 in order ....

似乎只是忽略-E符号就在那里。如果我不使用文件中的数据

,结果会很好
> rank(c(9.34E-07, 4.04E-06, 7.17E-06))
[1] 1 2 3

我错过了什么吗?感谢。

2 个答案:

答案 0 :(得分:1)

是的 - $proxygeneld_full.txt[0:20]甚至不是数字。这是一个因素:

13329 Levels: 0.0001116 0.00012452 0.00015494 0.00017892 0.00018345 ... adjP

因此rank()对排在因子表示后面的数字代码进行排名,并且E-0X“数字”排在水平中的非E数字之后。

查看str(comparison),您会发现proxygeneld_full.txt是一个因素。

我正在努力复制你在csv文件中使用E号码看到的行为。 R以数字形式正确读取它们。检查您的CSV以确保该列中没有任何数字值,或者未引用E编号。

啊!再次查看您引用的级别:在您显示的代码末尾潜伏着adjP。再次检查您的数据,因为adjP在那里有人在哪里,这迫使R将该变量编码为一个因素,因此您看到的排名行为如上所述。

答案 1 :(得分:1)

我猜你的csv文件中有一些非数字数据。 如果你这样做会怎么样?

as.numeric(comparison$proxygeneld_full.txt)

如果这产生的数字与您预期的数字不同,那么您在本专栏中肯定会有一些文字。