如何获得"日期差异"日期字段和指定日期之间?

时间:2015-07-15 11:53:30

标签: r date type-conversion datediff

Date.Trans 
20150623
20150613
20150616
20150611
20150625

嗨,

我想在名为" boo"的数据集中计算Date.Trans和07/07/2015之间的Date差异。 (天数的差异)。我是R的新手,我发现很难将Date.Trans字符串转换为日期,然后计算天数的差异。

这是我到目前为止所尝试的:

 strptime(boo$Date.Trans, "%y%m%d")

不会转换它们。

 boo$days <- as.Date(boo$Date.Trans, "%Y%m%d")
  

charToDate(x)出错:     字符串不是标准的明确格式

请帮忙

1 个答案:

答案 0 :(得分:1)

您发布的错误消息表明您的Date.Trans列是数字类型。如果它是字符或因子类型,则as.Date()调用将起作用。对于数字类型,您可以通过先强制转换为字符来实现此要求:

boo <- data.frame(Date.Trans=c(20150623,20150613,20150616,20150611,20150625));
as.Date(boo$Date.Trans,'%Y%m%d');
## Error in charToDate(x) :
##   character string is not in a standard unambiguous format
boo$days <- as.Date('2015-07-07') - as.Date(as.character(boo$Date.Trans),'%Y%m%d');
boo;
##   Date.Trans    days
## 1   20150623 14 days
## 2   20150613 24 days
## 3   20150616 21 days
## 4   20150611 26 days
## 5   20150625 12 days
sapply(boo,class);
## Date.Trans       days
##  "numeric" "difftime"

一般情况下,您应尽量从最早的时刻强制使用适当的数据类型;这将有助于防止这些困难。例如,如果定义boo内联,则可以执行此操作:

boo <- data.frame(Date.Trans=as.Date(c('2015-06-23','2015-06-13','2015-06-16','2015-06-11','2015-06-25')));
boo;
##   Date.Trans
## 1 2015-06-23
## 2 2015-06-13
## 3 2015-06-16
## 4 2015-06-11
## 5 2015-06-25
class(boo$Date.Trans);
## [1] "Date"

或者,如果为时已晚,例如,如果您从文件中读取数据,那么您可以在以后修复它:

boo$Date.Trans <- as.Date(as.character(boo$Date.Trans),'%Y%m%d');
boo;
##   Date.Trans
## 1 2015-06-23
## 2 2015-06-13
## 3 2015-06-16
## 4 2015-06-11
## 5 2015-06-25
class(boo$Date.Trans);
## [1] "Date"