按R中的数据重新排序因子水平

时间:2015-05-22 22:08:01

标签: r dataframe

假设我有一个等级为

的因子

"1/1/2013" "1/1/2014" "1/1/2015" "10/1/2012" "10/1/2013" "10/1/2014" "4/1/2013" "4/1/2014" "4/1/2015" "7/1/2012" "7/1/2013" "7/1/2014"

按日期求助的最简单方法是什么?我知道我可以通过挑选和选择来手动完成......

谢谢!

1 个答案:

答案 0 :(得分:1)

这将对因子的级别进行排序,以便绘图有意义,但普通因素实际上没有顺序。为了真正有秩序,即项目之间的关系小于或大于,你需要定义一个“有序”因子(见?factor):

> fac <- factor(c( "1/1/2013",  "1/1/2014",  "1/1/2015",  "10/1/2012", "10/1/2013" ,"10/1/2014", "4/1/2013",  "4/1/2014" , "4/1/2015" , "7/1/2012",  "7/1/2013",  "7/1/2014") )
> levels(fac) <- levels(fac)[ order( as.Date(levels(fac), format="%m/%d/%Y") )]
> fac
 [1] 7/1/2012  10/1/2012 1/1/2013  4/1/2013  7/1/2013  10/1/2013
 [7] 1/1/2014  4/1/2014  7/1/2014  10/1/2014 1/1/2015  4/1/2015 
12 Levels: 7/1/2012 10/1/2012 1/1/2013 4/1/2013 ... 4/1/2015

现在级别将按您期望的顺序显示:

> levels(fac)
 [1] "7/1/2012"  "10/1/2012" "1/1/2013"  "4/1/2013"  "7/1/2013" 
 [6] "10/1/2013" "1/1/2014"  "4/1/2014"  "7/1/2014"  "10/1/2014"
[11] "1/1/2015"  "4/1/2015" 

但是如果有重复的元素,那么级别将比因子向量本身短,并且它们在向量本身中仍然不是“按顺序”,...因为它不是有序因子。将该向量转换为Date - 类。

会更有意义

或者你可以忽略我的所有建议,只是做你要求做的事情:

> fac[ order( as.Date(fac, format="%m/%d/%Y") )]
 [1] 7/1/2012  10/1/2012 1/1/2013  4/1/2013  7/1/2013  10/1/2013
 [7] 1/1/2014  4/1/2014  7/1/2014  10/1/2014 1/1/2015  4/1/2015 
12 Levels: 1/1/2013 1/1/2014 1/1/2015 10/1/2012 ... 7/1/2014