【问题标题】:Arrange data frame column names in date order - R按日期顺序排列数据框列名 - R
【发布时间】:2017-06-16 03:00:35
【问题描述】:

在我的数据框中,我有 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

我将数据框从长旋转到宽,以将每个日期(可变列)保留为一个列标题。在枢轴之前,我可以看到日期框架是按日期排序的。然而,在我的枢轴之后,它按字母顺序排列,比如所有的 Aprils first,August next 等。我如何按月份对列名进行排序?

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. ............................

【问题讨论】:

  • 添加了我的评论。你能删除重复的东西吗? @RonakShah
  • 请根据示例数据更新您的输出,而不仅仅是 ............... 。这使帖子不清楚。
  • 问题是关于列名,而不是值。正如我在问题中提到的,pivot 没有按 1 月 7 日、2 月 7 日、.. 的顺序返回输出列,而是按 4 月 7 日、4 月 8 日、.. 8 月 7 日、8 月 8 日的顺序返回列...
  • 是的,行得通。但我更喜欢整洁。无论如何,谢谢,如果这在 tidyr 中是不可能的,我会继续这样做。
  • 基本 R 选项将是 out[order(as.Date(paste0("01-", names(out[-1])), "%d-%b-%y"))]

标签: r tidyr


【解决方案1】:

这是你想要的吗:

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

然后清理colnames

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

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-11-15
      • 2018-03-18
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多