【问题标题】:R: date format with just year and monthR:只有年和月的日期格式
【发布时间】:2021-07-05 08:37:33
【问题描述】:

我有一个包含月度数据的数据框,一列包含年份,一列包含月份。我想将它们组合成一个日期格式的列,从这个开始:

Year    Month     Data
2020        1       54
2020        2       58
2020        3       78
2020        4       59

到这里:

   Date    Data
2020-01      54
2020-02      58
2020-03      78
2020-04      59

【问题讨论】:

  • 那是句号,不是日期。日期是一种值,如整数和浮点数,而不是格式

标签: r date-format


【解决方案1】:

我认为你不能在不显示日期的情况下在 R 中表示日期格式。如果你想要一个字符列,就像你的例子一样,你可以这样做:

> x <- data.frame(Year = c(2020,2020,2020,2020), Month = c(1,2,3,4), Data = c(54,58,78,59))
> x$Month <- ifelse(nchar(x$Month == 1), paste0(0, x$Month), x$Month) # add 0 behind.
> x$Date <- paste(x$Year, x$Month, sep = '-')
> x
  Year Month Data    Date
1 2020    01   54 2020-01
2 2020    02   58 2020-02
3 2020    03   78 2020-03
4 2020    04   59 2020-04
> class(x$Date)
[1] "character"

如果你想要一个日期类型的列,你必须添加:

x$Date <- paste0(x$Date, '-01')
x$Date <- as.Date(x$Date, format = '%Y-%m-%d')

x

class(x$Date)

【讨论】:

    【解决方案2】:

    也许最简单的方法是为所有日期任意设置一天(例如 01)?因此将保留日期间隔。

    data<-data.frame(Year=c(2020,2020,2020,2020), Month=c(1,2,3,4),  Data=c(54,58,78,59))
    data$Date<-gsub(" ","",paste(data$Year,"-",data$Month,"-","01"))
    data$Date<-as.Date(data$Date,format="%Y-%m-%d")
    

    【讨论】:

    • 只能用“%Y-%m”获取日期吗?如果我从您的代码中删除日期,我会得到一个包含 NaN 的 Date 列
    【解决方案3】:

    你可以使用sprintf -

    sprintf('%d-%02d', data$Year, data$Month)
    #[1] "2020-01" "2020-02" "2020-03" "2020-04"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 2015-04-29
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2014-03-21
      相关资源
      最近更新 更多