订单功能仅部分重新排序数据帧

时间:2016-06-10 09:44:37

标签: r sorting dataframe

我使用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函数,但没有取得任何成功。有关如何解决此问题的任何建议?

任何帮助非常感谢。 感谢

2 个答案:

答案 0 :(得分:0)

避免通过

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

然后剩余的东西将按预期工作。

答案 1 :(得分: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 Block建议的事情,并且如果有必要,在你使用{之后把它变成一个因素{1}}并完成排序。