3

我有一个 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())

现在要做什么?

4

1 回答 1

1

该错误来自您试图比较不同类的两个对象的事实。调用Sys.Date返回一个类对象Date。您可以通过调用来检查class(Sys.Date)。这返回Date。此外,您似乎正在使用该readxl包,该包通常将datetime列作为POSIXct对象导入。结果,您试图将POSIXct对象与Date对象进行比较。这几乎总是会导致错误。正如评论中的建议,您应该使用该函数转换Sys.Date为对象,或者您可以将列中的值转换为对象。我建议你做第一个,因为你只用下面的代码行转换一个值:POSIXctas.POSIXctend_dateDate

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)。这意味着它是一个 Rlogical值向量。但由于它是空的, 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

我希望这有帮助。

于 2017-08-03T17:10:46.307 回答