在使用as.Date(x) - as.Date(y)后,有"天"在号码之后

时间:2017-09-18 15:35:07

标签: r

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

我在我的data_frame中创建一个列,其中包含两个日期列的日期数据。

我得到了正确的结果但是当我再次呼叫这个数据框时,在这个新专栏中,我得到了#34;天"写在号码之后。

 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现在每个数值后写了#34天。

有没有办法摆脱这种情况或将其改为年?

由于

3 个答案:

答案 0 :(得分:2)

要了解行为,您需要认识到减去两个日期不会返回数字向量。它返回类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属性。这可能会产生混淆,因为后续操作不能更改单位,但units对象的difftime属性不会更改。

z / 30
Time difference of 3.6 days

我建议采用一种更安全的方法来计算时差

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

我确实建议指定units参数;取决于对象的接近程度,R中单位的自动选择可能并不总是相同(POSIXct变量(日期/时间对象)更可能是这样。通过指定单位想要合作,你可以避免混淆。

答案 1 :(得分:1)

您可以将函数as.numeric与参数units

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

答案 2 :(得分:1)

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