2012-07-06 73 views
2

我有一個數據集,我需要按參與者(RECORDING_SESSION_LABEL)和trial_number排序。但是,當我使用R排序數據時,沒有任何排序函數嘗試將變量以我想要的正確數字順序排列。參與者變量出來沒問題,但試用ID變量以我需要的順序出錯。使用排序R中的數據

fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(trial_number)),]

參與者編號出來爲:

118 118 118 211等211 211 306等306 306等等(這是很好的)

trial_number出來作爲:

1 1 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 2 2 20 20 ....(這不是我想要的 - 它似乎是在詞法上排序而非比數字)

我想什麼是trial_number是爲了這樣每個參與者數目之內:

1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 ....

我已經檢查過,這些變量不是因素,是數字,也沒有'as.numeric',但沒有喜悅的嘗試。環顧四周,我看到sort()mixedsort()可能取代'訂單'的建議,都提出了錯誤。我正在慢慢拉我的頭髮,我認爲應該是一件簡單的事情。任何人都可以幫助闡明如何做到這一點,以得到我需要的東西?

+0

您可能正在使用attach()。如果是這樣,停止這樣做。即使它們現在不是因素,它們或者在過去的某個時間被分類爲「字符」或「as.numeric(因子)」。向我們顯示dput(head(RECORDING_SESSION_LABEL)),dput(head(trial_number))的輸出,如果「參與者」是一個對象,那麼我們也需要它的結構。 – 2012-07-06 13:32:56

回答

2

即使您聲稱這不是一個因素,它的行爲確實如同它是一個因素。測試是否是一個因素可能會很棘手,因爲一個因素只是一個帶有levels屬性和類標籤的整數向量。如果它是一個因素,你的代碼需要有嵌套在as.numeric()裏面as.character()呼叫:

fix_rep[order(as.numeric(RECORDING_SESSION_LABEL), as.numeric(as.character(trial_number))),]

要真正知道這是否是一個因素,我建議str()功能: str(trial_number)

+1

很好的答案。打敗我49秒。 – 2012-07-06 13:21:58

+0

這是答案。在一個因素上做'as.numeric'只會給你一個因子標籤的編號,默認情況下它是字典編碼的。 – Wayne 2012-07-06 13:22:25

+0

感謝Shea(以及所有其他人發佈),您的解決方案像夢一樣運作!看起來我可以保持我的頭髮!..並繼續使用R.我會得到一整天的一切! – Jimichanga1 2012-07-06 14:09:57

0

我認爲在這種情況下設計自己的功能可能是值得的。這也不會是太難硬,基本上你可以設計一個冒泡排序算法,只需做一些改動。這些改變可能會將每個數字改爲一個字符串,並且首先將具有不同數字位數的那些數字排序到不同的容器中(通過查找哪些數字,現在是字符串,具有最大數量的索引很容易完成)。然後,以類似的方式,可以通過將最不重要的數字轉換爲數字類型並檢查哪些是最大/最小的數字來對這些箱中的數字進行排序。如果你有興趣,我可以爲它提供一些代碼,但是,看起來上面的兩個代碼讓我對內置函數有了很大的興趣。我從來沒有使用過這些功能,所以我不確定它們是否會像你打算的那樣工作,但是重新發明輪子是沒有用的。

+0

非常感謝MikeZ。我試過上面的解決方案,它工作。對於R來說,我是一個比較新的/輕量級的用戶,所以我開始着手寫作。感謝您對此的建議。 – Jimichanga1 2012-07-06 14:10:52

+0

沒問題!我剛從R開始,在這裏也得到了很多幫助。祝一切順利 :)。 – MikeZ 2012-07-06 15:21:23