格式=“”时as.Date的行为

时间:2019-07-16 14:35:36

标签: r date-format typecast-operator

我有一个简单的问题。

函数as.Date如何工作?

谁能解释为什么简单的""会更改下面代码中的所有内容?

as.Date("03/04/2019")
#[1] "0003-04-19"

as.Date("03/04/2019", "")
#[1] "2019-07-16"

1 个答案:

答案 0 :(得分:2)

这直接来自您使用?as.Date查看的帮助页面:

## S3 method for class 'character'
as.Date(x, format, tryFormats = c("%Y-%m-%d", "%Y/%m/%d"),
        optional = FALSE, ...)
  • x:要转换的对象。
  • 格式:字符串。如果未指定,它将在第一个非NA元素上尝试tryFormats一个接一个,如果没有成功则给出错误。否则,将通过strptime进行处理。

因此,在第一种情况下,我们不提供format。在这种情况下,as.Date尝试以下格式:“年-月-日”和“年/月/日”。在这种情况下,第二个“有效”,因此我们得到以下回报:

as.Date("03/04/2019") 
[1] "0003-04-20"

“ 03”解释为年份,“ 04”解释为月份,“ 2019”解释为日期。由于day只能是数字,因此只使用前两位。

在第二种情况下,我们自己提供格式:

as.Date("03/04/2019", format = "") 
[1] "2019-07-16"

如果提供了formatas.Date不会尝试任何格式。而是返回strptime("03/04/2019", format = "")。 在strptime的帮助页面中,您可以找到以下内容:

  

对于strptime,输入字符串无需完全指定日期:   假设未指定的秒,分钟或小时为零,并且   未指定的年,月或日为当前日期。

因此,您提供了一种格式,但其中不包含任何格式,因此返回了当前日期。

在任何情况下,您都可以自己指定格式:

as.Date("03/04/2019", format = "%d/%m/%Y") 
[1] "2019-04-03"