【问题标题】:Print a date range in a loop with correctly formatted dates [duplicate]使用格式正确的日期循环打印日期范围[重复]
【发布时间】:2021-06-20 11:11:16
【问题描述】:

在控制台中输入:

seq(as.Date('2020-04-02'), as.Date('2020-04-30'), by = 'day')
 [1] "2020-04-02" "2020-04-03" "2020-04-04" "2020-04-05" "2020-04-06" "2020-04-07" "2020-04-08" "2020-04-09" "2020-04-10" "2020-04-11" "2020-04-12"
[12] "2020-04-13" "2020-04-14" "2020-04-15" "2020-04-16" "2020-04-17" "2020-04-18" "2020-04-19" "2020-04-20" "2020-04-21" "2020-04-22" "2020-04-23"
[23] "2020-04-24" "2020-04-25" "2020-04-26" "2020-04-27" "2020-04-28" "2020-04-29" "2020-04-30"

我的循环:

for(i in seq(as.Date('2020-04-02'), as.Date('2020-04-30'), by = 'day')) {print(i)}

给予:

[1] 18354
[1] 18355
[1] 18356
[1] 18357
[1] 18358
[1] 18359
[1] 18360
[1] 18361
[1] 18362
[1] 18363
[1] 18364
[1] 18365
[1] 18366
[1] 18367
[1] 18368
[1] 18369
[1] 18370
[1] 18371
[1] 18372
[1] 18373
[1] 18374
[1] 18375
[1] 18376
[1] 18377
[1] 18378
[1] 18379
[1] 18380
[1] 18381
[1] 18382

预计的实际日期。

试过了:

print(as.Date(i))

但这给出了:

Error in as.Date.numeric(i) : 'origin' must be supplied

如何通过循环打印我的日期范围?

【问题讨论】:

    标签: r


    【解决方案1】:

    试试:

    for (i in as.list(seq(as.Date('2020-04-02'), as.Date('2020-04-30'), by = 'day'))) {
      print(i)
    }
    

    我不知道为什么这是必要的,但如果你运行

    for (i in Sys.Date()) {browser();print(i);}
    # Called from: top level 
    # Browse[1]> 
    debug at #1: print(i)
    # Browse[1]> 
    i
    # [1] 18709
    

    您会看到ifor (.) 部分中被转换为数字。 as.list 有助于保留该类。

    【讨论】:

      【解决方案2】:

      另一种方法是将origin 参数提供给as.Date

      for(i in seq(as.Date('2020-04-02'), as.Date('2020-04-30'), by = 'day')){
        print(as.Date(i, origin="1970-01-01"))}
      

      当 R 将日期转换为数字时,它返回 197-01-01 之后的天数。其他软件使用不同的来源。

      【讨论】:

        猜你喜欢
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        相关资源
        最近更新 更多