如何生成日期序列格式dd / mm / yy或%d%m%y?

时间:2014-04-29 00:19:38

标签: r date seq

通常我会用这个:

seq(as.Date("01/01/1964"), as.Date("01/12/1964"), "months", format = "%d%m%Y", tz = "UTC")

但我收到了这个:

[1] "0001-01-19" "0001-02-19" "0001-03-19" "0001-04-19" "0001-05-19" "0001-06-19" "0001-07-19" "0001-08-19" "0001-09-19"
[10] "0001-10-19" "0001-11-19" "0001-12-19"

我尝试了其他人的推特和其他提示,但不起作用。

提前致谢。

修改

@ r2evans ans:

format(seq(as.Date('1964/01/01'), as.Date('1964/12/01'), 'months'), format="%d-%m-%Y", tz="UTC")
 [1] "01-01-1964" "01-02-1964" "01-03-1964" "01-04-1964" "01-05-1964" "01-06-1964" "01-07-1964" "01-08-1964" "01-09-1964"
[10] "01-10-1964" "01-11-1964" "01-12-1964"

2 个答案:

答案 0 :(得分:1)

来自help(as.Date)

  

格式:字符串。如果没有指定,它将在第一个非'''元素上尝试'“%Y-%m-%d”'然后''%Y /%m /%d“'。

对于调试,尝试提供信息:

as.Date("01/01/1964")
## [1] "0001-01-19"

您可以从中快速推断出它错误地识别您的字段。

如果您可以控制开始/结束日期格式,则只需更改它:

seq(as.Date("1964/01/01"), as.Date("1964/12/01"), "months", format = "%d%m%Y", tz = "UTC")
## [1] "1964-01-01" "1964-02-01" "1964-03-01" "1964-04-01" "1964-05-01" "1964-06-01"
## [7] "1964-07-01" "1964-08-01" "1964-09-01" "1964-10-01" "1964-11-01" "1964-12-01"

虽然format=参数不起作用(seq不使用它)。用format包裹整个内容以获取您想要的字符串,但要意识到这些字符串不再是Date类:

format(seq(as.Date('1964/01/01'), as.Date('1964/12/01'), 'months'), format="%Y%m%d", tz="UTC")
## [1] "19640101" "19640201" "19640301" "19640401" "19640501" "19640601" "19640701"
## [8] "19640801" "19640901" "19641001" "19641101" "19641201"

但是,如果您无法控制开始/停止日期的格式,则为每个format=添加tz=参数(如果需要,还加as.Date):< / p>

seq(as.Date('01/01/1964', format='%d/%m/%Y'), as.Date('01/12/1964', format='%d/%m/%Y'), 'months')
## [1] "1964-01-01" "1964-02-01" "1964-03-01" "1964-04-01" "1964-05-01" "1964-06-01"
## [7] "1964-07-01" "1964-08-01" "1964-09-01" "1964-10-01" "1964-11-01" "1964-12-01"

并根据需要使用format,如果需要。

答案 1 :(得分:0)

基础R中的解决方案

my.format <- "%d/%m/%Y"
seq(as.Date("01/01/1964", format = my.format),
    as.Date("01/12/1964", format = my.format),
    "months")
基本上,你错过了"/"

此外,正如所指出的,使用日期的ISO标准符号(例如YYYY-MM-DD)简化了很多。