【问题标题】:difftime() adds decimal numbersdifftime() 添加十进制数
【发布时间】:2015-04-10 10:09:03
【问题描述】:

我正在尝试使用 difftime() 获取特定日期的天数。如果我使用 11 月日期 (10.11.14) 它工作正常,如果我使用 9 月日期 (10.09.14) 它添加 .0417 到日期。知道如何解决这个问题吗?

head(dummydat)
reihe nummer bluh_datum
1     1      1   07.03.15
2     1      2   11.03.15
3     1      3   09.03.15
4     1      4       <NA>
5     1      5       <NA>
6     1      6   07.03.15

dummydat <- cbind(dummydat,"days"=as.numeric(difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y"),strptime("10.11.14", format="%d.%m.%y"), units="days")))
> head(dummydat)
  reihe nummer bluh_datum days
1     1      1   07.03.15  117
2     1      2   11.03.15  121
3     1      3   09.03.15  119
4     1      4       <NA>   NA
5     1      5       <NA>   NA
6     1      6   07.03.15  117
> dummydat <- cbind(dummydat,"days"=as.numeric(difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y"),strptime("10.09.14", format="%d.%m.%y"), units="days")))
> head(dummydat)
  reihe nummer bluh_datum days     days
1     1      1   07.03.15  117 178.0417
2     1      2   11.03.15  121 182.0417
3     1      3   09.03.15  119 180.0417
4     1      4       <NA>   NA       NA
5     1      5       <NA>   NA       NA
6     1      6   07.03.15  117 178.0417

【问题讨论】:

    标签: r difftime


    【解决方案1】:

    您可以像这样使用as.Date 而不是strptime

    difftime(as.Date(dummydat$bluh_datum, format = "%d.%m.%y"), as.Date("10.11.14", format = "%d.%m.%y"), units = "days")
    # Time differences in days
    # [1] 117 121 119  NA  NA 117
    difftime(as.Date(dummydat$bluh_datum, format = "%d.%m.%y"), as.Date("10.09.14", format = "%d.%m.%y"),  units = "days" )
    # Time differences in days
    # [1] 178 182 180  NA  NA 178
    

    或者你必须像这样指定时区tz="GMT"

    difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y", tz = "GMT"), strptime("10.09.14", format="%d.%m.%y", tz = "GMT"), units="days")
    # Time differences in days
    # [1] 178 182 180  NA  NA 178
    difftime(strptime(dummydat$bluh_datum, format="%d.%m.%y", tz = "GMT"),strptime("10.11.14", format="%d.%m.%y", tz = "GMT"), units="days")
    # Time differences in days
    # [1] 117 121 119  NA  NA 117
    

    如果你不指定时区看看会发生什么

    strptime(dummydat$bluh_datum, format="%d.%m.%y")
    # [1] "2015-03-07 CET" "2015-03-11 CET" "2015-03-09 CET" NA               NA               "2015-03-07 CET"
    strptime("10.09.14", format="%d.%m.%y")
    ## [1] "2014-09-10 CEST"
    

    不同日期的时区会有所不同。

    【讨论】:

      【解决方案2】:

      如果您不想要小数,请尝试使用 as.integer 而不是 as.numeric

      c(as.numeric(difftime("2015-12-02", "2014-12-02")), as.numeric(difftime("2015-12-02", "2014-11-01")))
      # [1] 365.0000 396.0417
      
      c(as.integer(difftime("2015-12-02", "2014-12-02")), as.integer(difftime("2015-12-02", "2014-11-01")))
      # [1] 365 396
      

      【讨论】:

        猜你喜欢
        • 2013-10-20
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-02
        • 1970-01-01
        相关资源
        最近更新 更多