按日期顺序排列数据框列名称 - R.

时间:2017-06-16 03:00:36

标签: r tidyr

在我的数据框中,我有3列,其中一列是日期,

实施例,

Region  variable value
TN      Jan-07   704
AU      Jan-07   3621
WB      Jan-07   776
KN      Jan-07   1015
TN.     Feb-07   90
KN.     Feb-07   87

我将数据框从long旋转到宽,以将每个日期(变量列)保持为一个列标题。在透视之前,我可以看到日期框架按日期排序。然而,在我的支点之后,按字母顺序排序,如所有Aprils首先,8月下一行等。如何按月订购列名?

Out <- dcast(testdata,Region~variable,value.var = "value")

输出应该是,

Region Jan-07 Feb-07 Mar-07.....
TN. ............................
AU. ............................
WB. ............................
KN. ............................

但我得到的是这个,

Region Apr-07 Apr-08 Aug-07.....
TN. ............................
AU. ............................
WB. ............................
KN. ............................

2 个答案:

答案 0 :(得分:3)

这就是你想要的:

out <- reshape(testdata, idvar = "Region",
               timevar = "variable", direction = "wide")
out

然后只需清除colnames

a = colnames(out)
b = sub('.*\\.', '', a)
colnames(out) = b

答案 1 :(得分:2)

您可以在重新塑造之前将日期转换为具有所需顺序的因子。例如:

library(tidyverse)

# Change the factor levels to the appropriate year range for your data
testdata.wide = testdata %>% 
  mutate(variable=factor(variable, levels=apply(expand.grid(month.abb, substr(1990:2017,3,4)), 1, paste, collapse="-"))) %>%
  spread(variable, value)
  Region Jan-07 Feb-07
1     AU   3621     NA
2     KN   1015     87
3     TN    704     90
4     WB    776     NA