2016-06-10 61 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并完成排序后的一个因素