希望这是一个简单的问题:
我在我的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天。
有没有办法摆脱这种情况或将其改为年?
由于
答案 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
类。