2016-11-21 68 views
0

我有一个数据帧,其列名为Stage。数据框是从定期更新的excel文件生成的。不使用因子自定义排序

本专栏应该只包含一些特定的值,例如'Planning'或'Analysis',但是有时候人们会将自定义值放入,停止不切实际。

我希望按此列排序的数据框以自定义排序顺序按时间顺序有意义(例如,对于我们来说,计划在分析之前进行)。我可以使用这些因素(例如Reorder rows using custom order),但如果我使用预定义的因素列表,则会丢失任何人们进入该列的意外值。我很高兴意外的价值观没有被正确排序,但我不想完全失去它们。

编辑:由floo0答案是惊人的,但我忘了提,我打算barplotting的结果,像

barplot(table(MESH_assurance_involved()[MESH_assurance_invol‌​ved_sort_order(), 'Stage']), main="Stage became involved") 

(括号因为这些闪亮的反应对象,不应该差异)。

结果未排序,尽管控制台中的测试显示基础数据已排序。

table也打破排序,但使用ggplot和没有表我得到相同的结果。

要显示维护源订单的barplot似乎需要类似于Ordering bars in barplot()的东西,但我找到的所有解决方案都需要考虑因素,并将它们与此处的解决方案混合,这对我来说无法实现。

回答

3

玩具数据集:

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, ] 

,让你

 Stage id 
2 Planning 2 
3 Analysis 3 
1 random1 1 
4 random2 4 
+0

谢谢。我得到我的数据排序,但当我barplot它,数据不显示排序'barplot(表(MESH_assurance_involved()[MESH_assurance_involved_sort_order(),'舞台']),main =“舞台参与”)(括号,因为闪亮) 。我知道要获得排序的barplot,你需要一些技巧,例如[barplot()中的排序条)(http://stackoverflow.com/questions/19681586/ordering-bars-in-barplot),但我不明白如何让我为自己工作:我明白你的代码是如何工作的,但同时考虑数据和数据排序顺序似乎超出了我的想象。 – anotherfred