【问题标题】:after using as.Date(x) - as.Date(y) there are "days" after the number使用 as.Date(x) - as.Date(y) 后数字后有“天”
【发布时间】:2017-09-18 15:35:07
【问题描述】:

希望这是一个简单的问题:

我正在我的 data_frame 中创建一个列,它采用两个日期列的日期差异。

我得到了正确的结果,但是当我再次调用这个数据框时,在这个新列中,我在数字后面写了“天”。

 my code is:

 temp <- temp %>%
 mutate(AGEMOS = as.numeric(as.Date(temp$INTERVIEWDATE,"%m/%d/%Y")-
                 as.Date(temp$BDAY,"%m/%d/%Y")) / 30.475)

并且,重申一下,AGEMOS 现在有“在每个数值之后写入的天数。

有什么办法可以摆脱这个或将其更改为年?

谢谢

【问题讨论】:

    标签: r


    【解决方案1】:

    要理解这种行为,您需要认识到减去两个日期不会返回数值向量。它返回一个difftime类的向量

    x <- as.Date("2017-05-11")
    y <- as.Date("2017-01-23")
    
    z <- x - y 
    
    class(x) # Date
    class(y) # Date
    class(z) # difftime
    

    difftime 对象有自己的print 方法,该方法打印units 属性以便清楚起见。这可能会产生混淆,因为后续操作无法更改单位,但 difftime 对象的 units 属性不会更改。

    z / 30
    Time difference of 3.6 days
    

    我推荐一种更安全的方法来计算时间差

    as.numeric(difftime(x, y, units = "days"))
    

    我确实建议指定 units 参数;根据对象的接近程度,R 中单位的自动选择可能并不总是相同(这更可能是 POSIXct 变量,它们是日期/时间对象。通过指定您想要的单位一起工作,可以避免混淆。

    【讨论】:

      【解决方案2】:

      你可以使用函数as.numeric和参数units

      as.numeric(as.Date("2017-08-20")-as.Date("2017-09-03"), units = "days")
      

      【讨论】:

        【解决方案3】:

        您也可以使用difftime 并指定您感兴趣的单位。即difftime(temp$BDAY, temp$INTERVIEWDATE, units = "days",只要它们的参数是date 类。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-13
          • 1970-01-01
          • 2022-08-18
          • 1970-01-01
          • 1970-01-01
          • 2020-08-09
          • 2017-01-19
          相关资源
          最近更新 更多