如何在没有天的情况下以Y-m格式转换日期

时间:2016-05-03 16:40:13

标签: r

我有一个如下所示的数据向量:

dates<-c("2014-11", "2014-12", "2015-01", "2015-02", "2015-03", "2015-04")

我正在尝试将其转换为可识别的日期格式,但没有运气:

as.Date(dates,"%Y-%m")
[1] NA NA NA NA NA NA

我怀疑问题在于没有指定日期。

如何解决这个问题呢?

2 个答案:

答案 0 :(得分:5)

如果我们需要转换为Date课程,则需要一天。因此,我们paste可以感兴趣的一天,例如1,并使用as.Date

as.Date(paste0(dates, "-01"))

答案 1 :(得分:3)

zoo 包有一个很好的接口,允许存储年月数据和as.Date方法来强制转换Date对象。例如:

library("zoo")
dates <- c("2014-11", "2014-12", "2015-01", "2015-02", "2015-03", "2015-04")

将字符向量或年 - 月转换为yearmon的函数为as.yearmon。第二个参数是各个字符串中日期部分的格式。我在这里使用

  • %Y年份与世纪
  • %m作为小数的月份
  • 以文字-
  • 分隔

yrmo <- as.yearmon(dates, "%Y-%m")

这给出了

> yrmo
[1] "Nov 2014" "Dec 2014" "Jan 2015" "Feb 2015" "Mar 2015" "Apr 2015"

这实际上是默认设置,因此您可以完全取消格式部分,例如yrmo <- as.yearmon(dates)

要转换为Date类对象,请使用as.Date方法

> as.Date(yrmo)
[1] "2014-11-01" "2014-12-01" "2015-01-01" "2015-02-01" "2015-03-01"
[6] "2015-04-01"

这个方法有一个第二个参数frac,它被指定允许你说明你想要每个生成Date元素的月份的距离(多少天作为长度的一小部分)每月一个月)

> as.Date(yrmo, frac = 0.5)
[1] "2014-11-15" "2014-12-16" "2015-01-16" "2015-02-14" "2015-03-16"
[6] "2015-04-15"