我使用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 :(得分: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}}并完成排序。