按日期顺序排列数据框列名称 - R
Arrange data frame column names in date order - R
在我的数据框中有 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
我将数据框从长旋转到宽,以将每个日期(变量列)保持为一列 header。在 pivot 之前,我可以看到日期框架是按日期排序的。然而,在我的数据透视之后,它按字母顺序排序,比如所有的四月在前,八月在后,等等。我如何按月对列名进行排序?
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. ............................
这是你想要的吗:
out <- reshape(testdata, idvar = "Region",
timevar = "variable", direction = "wide")
out
然后只需清理 colnames
:
a = colnames(out)
b = sub('.*\.', '', a)
colnames(out) = b
您可以在重塑之前将日期转换为具有所需顺序的因素。例如:
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
在我的数据框中有 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
我将数据框从长旋转到宽,以将每个日期(变量列)保持为一列 header。在 pivot 之前,我可以看到日期框架是按日期排序的。然而,在我的数据透视之后,它按字母顺序排序,比如所有的四月在前,八月在后,等等。我如何按月对列名进行排序?
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. ............................
这是你想要的吗:
out <- reshape(testdata, idvar = "Region",
timevar = "variable", direction = "wide")
out
然后只需清理 colnames
:
a = colnames(out)
b = sub('.*\.', '', a)
colnames(out) = b
您可以在重塑之前将日期转换为具有所需顺序的因素。例如:
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