有时候,我使用这样的数据:
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”会产生相同的结果,但不会产生(例如)订购问题。
答案 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"