R:为什么'%b。%Y'日期类不是“日期”?

时间:2018-09-21 09:12:45

标签: r date

有时候,我使用这样的数据:

sep-2018

从这样的日期开始:

Sys.Date()
[1] "2018-09-21"

要获得此结果,我通常使用:

format(Sys.Date(),'%b-%Y')

但是它的class不是日期:

 class(format(Sys.Date(),'%b-%Y'))
[1] "character"

为什么不是约会?可以使用class() = date来实现它吗?

还有一个像动物园这样的外部图书馆。

library(zoo)
> class(format(as.yearmon(format(Sys.Date()), "%Y-%m-%d"), "%b.%Y"))
[1] "character"

也使用“%m。%Y”会产生相同的结果,但不会产生(例如)订购问题。

2 个答案:

答案 0 :(得分:3)

format命令采用日期,并根据您提供的格式输出可打印的字符串。引用文档:

An object of similar structure to x containing character representations of the 
elements of the first argument x in a common format, and in the current 
locale's encoding.

此外,Date变量在内部以数字类型存储(自1970-01-01开始的天数)

dput(Sys.Date())
#structure(17795, class = "Date")

structure(0, class = "Date")
#[1] "1970-01-01"

因此,要查明日期,您需要使用日,月和年字段。如果您没有全部三个,则可能会返回NA或错误。时间课程也是如此。如果没有数据,则可以使用一些虚拟值,并使用格式仅打印所需的字段。

答案 1 :(得分:1)

如Rohit所说,format不会输出Date对象,而是输出您选择的格式的字符串。

要从类似"sep-2018"的字符串中获取Date对象,可以使用readr::parse_date()

(my_date <- readr::parse_date("sep-2018", format = '%b-%Y'))
#[1] "2018-09-01"

class(my_date)
#[1] "Date"