2010-10-22 17 views
0

我嘗試使用-E符號來命令csv文件,但rank()函數在數字上表現怪異。當使用科學記數法編號時,rank()排名不正確

> 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 

我錯過了什麼嗎?謝謝。

回答

1

我想你的csv文件中有一些非數字數據。 如果你這樣做會發生什麼?

as.numeric(comparison$proxygeneld_full.txt) 

如果這會產生比你預期的不同的號碼,就肯定有在此列一些文字。

+0

這將給所有的數字,但這是因爲所討論的變量是一個因素和'as.numeric()'它會返回內部代碼(1,2,3,...,n)而不是數據被強制爲數字。 – 2010-10-22 18:08:27

+0

我剛發現自己的問題。正如你所說,我有一些專欄文章。我開始恨自己忽視這件事。 – 2010-10-22 18:22:26

1

Yep - $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把這個變量編碼爲一個因素,因此你按照上面描述的排名看到了這個行爲。