2016-06-10 62 views
1

我已經創建了一個數據框,使用rbind()來將兩個數據框相同的行名追加在一起。然後我嘗試使用order()函數按字母順序排列因子級別。但是,它仍然將數據框視爲兩個單獨的對象,並按字母順序排列第一個,然後按字母順序排列第二個。訂單功能只能部分重新排序數據幀

實施例:

df1 <- data.frame(site=c("A", "F", "C")) 

df2 <- data.frame(site=c("B", "G", "D")) 

new.df <- rbind(df1, df2) 

new.df <- new.df[order(new.df$site),] 

結果:

site 
A 
C 
F 
B 
D 
G 

我已經看過使用arrange功能從包dplyr重排序的數據,例如其他的方法,但都沒有成功。有關如何解決這個問題的任何建議?

任何幫助非常感謝。 感謝

回答

0

避免創造影響因素由

df1 <- data.frame(site=c("A", "F", "C"), stringsAsFactors = FALSE) 
df2 <- data.frame(site=c("B", "G", "D"), stringsAsFactors = FALSE) 

那麼剩下的東西將正常工作。

+0

感謝@Uwe Block,工作完美! –

+0

@ M.Hilton我很高興你能找到我的答案有用。你介意接受我的答案,點擊選中標記左邊?謝謝。 – Uwe

0

我在猜測你不是在做你認爲你在那裏做的事情:由此產生的new.df不再是一個數據框,它是一個因素。 order的結果是把它放在因子水平的順序中(見levels(new.df$site)。所以,如果你真的想這樣做(即保持它作爲一個因子而不是一個字符向量),你需要首先重新排序水平。

new.df$site <- factor(new.df$site, levels = sort(levels(new.df$site))) 
new.df[order(new.df$site), ] 
[1] A B C D F G 
Levels: A B C D F G 

但是,除非你真的需要它從一開始的一個因素,我想你最好會被勸告做@Uwe座暗示,如有必要,將其在以使用rbind並完成排序後的一個因素