将excel文件中的日期与系统日期进行比较

时间:2017-08-03 16:18:50

标签: r dataframe readxl

我有一个excel文件,其中有两列start_dateend_date。我想将end_date与系统日期进行比较,但每次使用此代码时都会出错:

  

不兼容的方法(" ops.Date"," Ops.POSIXt")"<"

我正在使用

阅读excel文件
x<-read_excel("book.xlxs", Header="TRUE")

现在我正在使用

Myframe<-ifelse(x$end_date>Sys.Date())

现在该怎么办?

1 个答案:

答案 0 :(得分:1)

错误来自于您正在尝试比较不同类的两个对象。对Sys.Date的调用返回类Date的对象。您可以致电class(Sys.Date)进行检查。这将返回Date。此外,您似乎使用readxl包,它通常将datetime列导入为POSIXct个对象。因此,您尝试将POSIXct个对象与Date个对象进行比较。这几乎总会导致错误。根据评论中的建议,您应该使用函数Sys.DatePOSIXct转换为as.POSIXct对象,或者将end_date列中的值转换为Date对象。我建议你先做第一个,因为你只用以下代码行转换一个值:

Myframe<-ifelse(x$end_date > as.POSIXct(Sys.Date()), 'TRUE_VAL', 'FALSE_VAL')

如果end_date中的值不大于as.POSIXct(Sys.Date()),则比较x$end_date > as.POSIXct(Sys.Date())将返回空向量。这就是你看到logical(0)的原因。这意味着它是logical值的R向量。但由于它是空的,R将返回logical(0)

如果您将比较更改为x$end_date <= as.POSIXct(Sys.Date()),则可能会看到logical值(TRUEFALSE)的向量。

此外,如果您希望有一个新列跟踪列end_date中的哪些行通过了比较测试,您可以执行以下操作:

x$end_date_passed <- ifelse(x$end_date > as.POSIXct(Sys.Date()), 'yes', 'no')

此处的新列名为end_date_passed

我希望这会有所帮助。