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)出错: 字符串不是标准的明确格式
请帮忙
答案 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"