【问题标题】:Convert "September 2017" to Date将“2017 年 9 月”转换为日期
【发布时间】:2017-10-09 16:33:41
【问题描述】:

对于另一个日期问题,我很抱歉,但我找不到答案。 我有一个日期类型“2017 年 9 月”,需要将其转换为“2017 年 9 月 30 日”(月份的最后一天——所有年份的所有月份)。 我试过了:

date <- as.Date(date), "%B %d %Y")

+ %d%m%y 的变体

还有:

library(zoo)
date <- as.Date(as.yearmon(date))

但每次我都有NA

【问题讨论】:

  • 使用as.Date(paste(30, "September 2017"), format="%d %B %Y")。你需要包括一天。月年不够。
  • 请注意您的locales when using %B
  • &gt; as.Date(paste(01, "September 2017"), format="%d %B %Y") [1] NA

标签: r date datetime


【解决方案1】:

这对我有用:

> library(zoo)
> s = "September 2017"
> as.yearmon(s)
[1] "Sep 2017"

如果我然后转换为日期,它会得到当月的第一天:

> as.Date(as.yearmon(s))
[1] "2017-09-01"

这似乎正是您正在做的事情,但您没有明确向我们展示您的“2017 年 9 月”字符串在哪里,所以我怀疑那里有问题...

至于“30日”,二月你打算做什么?您可以使用frac=1 获取本月的最后一天(帽子提示@Henrik):

> as.Date(as.yearmon(s),frac=1)
[1] "2017-09-30"
> as.Date(as.yearmon("February 2018"),frac=1)
[1] "2018-02-28"
> as.Date(as.yearmon("February 2020"),frac=1)
[1] "2020-02-29"

【讨论】:

  • 关于 2 月的好问题,我会保留 01.09.. 我有一个文件名“X Y Z W September, 2017”。比我这样做:date &lt;-append(unlist(strsplit(file.list[i], ' '))[5], unlist(strsplit(file.list[i], ' '))[6]) year &lt;- strsplit(date[2], '.', fixed=TRUE)[[1]][1] date &lt;- sub(',', '', date) paste(date[1], year, collapse =' ') 然后:date &lt;- as.Date(as.character(paste(date[1], year, collapse =' ')), "%B %d %Y")date &lt;- as.Date(as.yearmon(paste(date[1], year, collapse =' ')))
  • 查看as.Date.yearmonfrac参数
  • 我很抱歉 Enter 的,不知道为什么他们不工作,试图修复。
  • 获取当月最后一天的一种方法是找到下个月的第一天并从中减去一天。这有多容易取决于库中的函数,而且我不是 R 专家。当月的第一天通常相对简单;也许加一个月很容易,然后减去一天。
  • 编辑以显示如何获得最后一天,谢谢@Henrik
猜你喜欢
  • 1970-01-01
  • 2018-02-24
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
相关资源
最近更新 更多