您发布的错误消息表明您的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"