希望这是一个简单的问题:
我正在我的data_frame中创建一个列,它接受两个日期列的日期差异。
我得到了正确的结果,但是当我再次调用这个数据框架时,在这个新的专栏中,我得到了数字后面写的"days“。
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现在有“在每个数值之后写入的天数”。
有没有办法摆脱这个问题或者把它改到几年?
谢谢
发布于 2017-09-18 15:40:45
可以将函数as.numeric与参数units一起使用。
as.numeric(as.Date("2017-08-20")-as.Date("2017-09-03"), units = "days")发布于 2017-09-18 15:54:40
要理解这种行为,您需要认识到减去两个日期并不返回数字向量。它返回difftime类的向量。
x <- as.Date("2017-05-11")
y <- as.Date("2017-01-23")
z <- x - y
class(x) # Date
class(y) # Date
class(z) # difftimedifftime对象有自己的print方法,为了清晰起见,它打印units属性。这可能会造成混乱,因为后续操作不能更改单元,但是difftime对象的difftime属性不会改变。
z / 30
Time difference of 3.6 days我推荐一种比较安全的计算时间差的方法。
as.numeric(difftime(x, y, units = "days"))实际上,我建议指定units参数;根据对象的紧密程度,R中单元的自动选择可能并不总是相同的(对于POSIXct变量(即日期/时间对象),这更有可能是正确的)。通过指定要使用的单元,可以避免混淆。
发布于 2017-09-18 15:54:35
您还可以使用difftime并指定您感兴趣的单元。即difftime(temp$BDAY, temp$INTERVIEWDATE, units = "days",只要它们的参数是date类。
https://stackoverflow.com/questions/46283192
复制相似问题