【问题标题】:How to get "Date Difference" between a field of dates and a specified date?如何获取日期字段和指定日期之间的“日期差异”?
【发布时间】:2015-10-04 10:47:44
【问题描述】:
Date.Trans 
20150623
20150613
20150616
20150611
20150625

你好,

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

这是我迄今为止尝试过的:

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

不转换它们。

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

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

请帮忙

【问题讨论】:

  • 试试as.Date(as.character(boo$Date.Trans), "%Y%m%d")
  • 第一次尝试时只需要一个大写的 Y "%Y"。

标签: r date type-conversion datediff


【解决方案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"

【讨论】:

  • 在某处可以看到as.character( :-)
  • 感谢您及时回复@bgoldst。它工作得很好,你节省了我很多时间。再次感谢。
猜你喜欢
  • 2023-03-26
  • 2019-04-24
  • 1970-01-01
  • 2020-11-19
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多