我有一个名为Stage
的列的数据框。数据框是从定期更新的Excel文件生成的。
此列中只应包含一些值,例如“计划”或“分析”,但人们偶尔会将自定义值设置为“停止”,这是不切实际的。
我想要按此列排序的数据框,其自定义排序顺序按时间顺序排列(例如,对于我们来说,计划在分析之前进行)。我可以使用因子(例如Reorder rows using custom order)来实现这一点,但是如果我使用预定义的因子列表,我会丢失人们进入该列的任何意外值。我很高兴意外的价值不能正确排序,但我不想完全失去它们。
编辑:通过floo0回答是惊人的,但我忽略了提到我计划对结果进行描绘,例如
barplot(table(MESH_assurance_involved()[MESH_assurance_involved_sort_order(), 'Stage']), main="Stage became involved")
(括号因为这些是闪亮的反应物,不应该有所作为。)
结果未排序,但在控制台中进行测试表明基础数据已排序。
table
也打破了排序,但是使用ggplot
而没有表格,我得到了相同的结果。
要显示保持源顺序的条形图似乎需要类似Ordering bars in barplot()的内容,但我找到的所有解决方案都需要因素,并且将它们与解决方案混合在一起对我来说不合适。
答案 0 :(得分:3)
玩具数据集:
git filter-branch --msg-filter "sed '/Reviewed:/s/notreviewed/$myarg/'" HEAD
所以dat <- data.frame(Stage = c('random1', 'Planning', 'Analysis', 'random2'), id=1:4,
stringsAsFactors = FALSE)
如下所示:
dat
现在你可以这样做:
> dat
Stage id
1 random1 1
2 Planning 2
3 Analysis 3
4 random2 4
哪个给你
known_levels <- c('Planning', 'Analysis')
my_order <- order(factor(dat$Stage, levels = known_levels, ordered=TRUE))
dat[my_order, ]