【问题标题】:Sort by Month and Year in Dataframe [duplicate]按数据框中的月份和年份排序[重复]
【发布时间】:2018-03-02 21:47:51
【问题描述】:

我在 R 中按月/年格式排序时遇到问题。 我有%m/%Y 格式的数据,但正在尝试使用

df_prod<-df_prod[order(as.Date(df_prod$date,format="%m/%Y")),]

数据框未排序。我收到了类似文本的订单 (01/2000,01/2001,01/2002)

其他细节: 我正在以%m/%Y 格式很好地排序的数据帧上执行dplyr 聚合:

df_prod<-df %>%
  group_by(date,comp_id) %>%
  summarise(a_prod=prod(1+TRT)-1)

谢谢

【问题讨论】:

  • 很可能是因为.Date(df_prod$date,format="%m/%Y") 产生了无效的日期,因此 order 函数根据字符串值进行排序。
  • 正如 dave2e 提到的,“%m/%Y”不是日期。您需要包含一天才能获得有效日期。最简单的解决方案是在开头粘贴“/1”并使用“%d/%d/%Y”。以前有人问过这个问题。

标签: r dataframe


【解决方案1】:

正如@lmo 已经提到的那样,仅使用%m/%Y 不会创建有效日期。一种解决方案是使用来自zoo 包的as.yearmon

library(zoo)    
df_prod<-df_prod[order(as.yearmon(df_prod$date,format="%m/%Y")),]

【讨论】:

    【解决方案2】:

    %m/%Y 是一个棘手的日期起始格式,如果这是您最终需要的:

    从字符串中获取日期组件:

    aa <- format(Sys.Date(), "%m/%Y")
    m <- as.numeric(substr(aa, 1, 2))
    y <- as.numeric(substr(aa, 4, 8))
    

    然后你可以将它们一起粘贴成日期格式并排序:

    as.Date(paste(y, "-", m, "-01", sep = ''))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多