【问题标题】:as.Date produces Nan with character vectoras.Date 产生带有字符向量的 Nan
【发布时间】:2020-11-20 19:34:29
【问题描述】:

我对 R 中的 as.Date 函数感到疯狂。我只是不明白为什么我的代码不起作用。

在这里,您可以找到数据:

irates_monthly = c("2000-01", "2000-02", "2000-03", "2000-04", "2000-05", "2000-06", "2000-07", "2000-08", "2000-09", "2000-10", "2000-11", "2000-12", "2001-01", "2001-02", "2001-03", "2001-04")

属于“字符”类型。

现在,这是我的代码:

as.Date(irates_monthly, format = '%Y-%m')

我唯一想要的是将字符向量 'irates_monthly' 转换为 Date 对象,以便我可以在 xts() 函数中使用它并带有参数 'order.by'。

我确信这很简单,但我只是没有看到错误。很感谢任何形式的帮助! 通过stackoverflow搜索也没有解决我的问题!

非常感谢任何提示或解决方案!

一切顺利,

曼努埃尔

【问题讨论】:

标签: r character as.date


【解决方案1】:
library(zoo)
irates_monthly = c("2000-01", "2000-02", "2000-03", "2000-04", "2000-05", "2000-06", "2000-07", "2000-08", "2000-09", "2000-10", "2000-11", "2000-12", "2001-01", "2001-02", "2001-03", "2001-04")

dts <- as.yearmon(irates_monthly)
> dts
 [1] "Jan 2000" "Feb 2000" "Mar 2000" "Apr 2000" "May 2000" "Jun 2000" "Jul 2000" "Aug 2000" "Sep 2000" "Oct 2000" "Nov 2000" "Dec 2000" "Jan 2001" "Feb 2001"
[15] "Mar 2001" "Apr 2001"

dts2 <- as.Date(dts)
> dts2
 [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01" "2000-06-01" "2000-07-01" "2000-08-01" "2000-09-01" "2000-10-01" "2000-11-01" "2000-12-01"
[13] "2001-01-01" "2001-02-01" "2001-03-01" "2001-04-01"

如果你不想使用动物园,你可以添加一个月的第一天,这样“as.Date”就可以了:

> as.Date(as.character(paste0(irates_monthly, '-01')))
 [1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01" "2000-06-01" "2000-07-01" "2000-08-01" "2000-09-01" "2000-10-01" "2000-11-01" "2000-12-01"
[13] "2001-01-01" "2001-02-01" "2001-03-01" "2001-04-01"

【讨论】:

  • 一个问题:as.Date 是否总是需要年月日?
  • 这个问题的正确答案是“否”,但对于日常应用,答案是“是”。
  • 好吧,那我还是不明白这个问题。为什么 as.Date 仅适用于年和月?
  • as.Date(12345) 会给你一个结果,你没有输入年+月+日。要将像 '2000-01-01' 这样的字符串转换为日期,您需要全部三个。
【解决方案2】:

我们可以将lubridate中的ymdtruncated一起使用

library(lubridate)
ymd(irates_monthly, truncated = 1)
#[1] "2000-01-01" "2000-02-01" "2000-03-01" "2000-04-01" "2000-05-01" "2000-06-01" "2000-07-01" "2000-08-01" "2000-09-01" "2000-10-01"
#[11] "2000-11-01" "2000-12-01" "2001-01-01" "2001-02-01" "2001-03-01" "2001-04-01"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2010-12-23
    相关资源
    最近更新 更多