我有一个简单的问题。
函数as.Date
如何工作?
谁能解释为什么简单的""
会更改下面代码中的所有内容?
as.Date("03/04/2019")
#[1] "0003-04-19"
as.Date("03/04/2019", "")
#[1] "2019-07-16"
答案 0 :(得分:2)
这直接来自您使用?as.Date
查看的帮助页面:
## S3 method for class 'character'
as.Date(x, format, tryFormats = c("%Y-%m-%d", "%Y/%m/%d"),
optional = FALSE, ...)
因此,在第一种情况下,我们不提供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"
如果提供了format
,as.Date
不会尝试任何格式。而是返回strptime("03/04/2019", format = "")
。
在strptime
的帮助页面中,您可以找到以下内容:
对于strptime,输入字符串无需完全指定日期: 假设未指定的秒,分钟或小时为零,并且 未指定的年,月或日为当前日期。
因此,您提供了一种格式,但其中不包含任何格式,因此返回了当前日期。
在任何情况下,您都可以自己指定格式:
as.Date("03/04/2019", format = "%d/%m/%Y")
[1] "2019-04-03"