我试图订购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
我错过了什么吗?感谢。
答案 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)
如果这产生的数字与您预期的数字不同,那么您在本专栏中肯定会有一些文字。