不使用因子

时间:2016-11-21 14:27:58

标签: r

我有一个名为Stage的列的数据框。数据框是从定期更新的Excel文件生成的。

此列中只应包含一些值,例如“计划”或“分析”,但人们偶尔会将自定义值设置为“停止”,这是不切实际的。

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

编辑:通过floo0回答是惊人的,但我忽略了提到我计划对结果进行描绘,例如

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

(括号因为这些是闪亮的反应物,不应该有所作为。)

结果未排序,但在控制台中进行测试表明基础数据已排序。

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

要显示保持源顺序的条形图似乎需要类似Ordering bars in barplot()的内容,但我找到的所有解决方案都需要因素,并且将它们与解决方案混合在一起对我来说不合适。

1 个答案:

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