我有一个 excel 文件,它有两列start_date
和end_date
. 我想将end_date
与系统日期进行比较,但每次使用此代码时都会出现错误:
“<”的不兼容方法(“ops.Date”、“Ops.POSIXt”)
我正在使用读取 excel 文件
x<-read_excel("book.xlxs", Header="TRUE")
现在我正在使用
Myframe<-ifelse(x$end_date>Sys.Date())
现在要做什么?
该错误来自您试图比较不同类的两个对象的事实。调用Sys.Date
返回一个类对象Date
。您可以通过调用来检查class(Sys.Date)
。这返回Date
。此外,您似乎正在使用该readxl
包,该包通常将datetime
列作为POSIXct
对象导入。结果,您试图将POSIXct
对象与Date
对象进行比较。这几乎总是会导致错误。正如评论中的建议,您应该使用该函数转换Sys.Date
为对象,或者您可以将列中的值转换为对象。我建议你做第一个,因为你只用下面的代码行转换一个值:POSIXct
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)
。这意味着它是一个 Rlogical
值向量。但由于它是空的, R 将返回logical(0)
。
如果您将比较更改为x$end_date <= as.POSIXct(Sys.Date())
,您可能会看到一个logical
值向量(TRUE
或FALSE
)。
此外,如果您希望有一个新列来跟踪该列中的哪些行end_date
通过了比较测试,您可以执行以下操作:
x$end_date_passed <- ifelse(x$end_date > as.POSIXct(Sys.Date()), 'yes', 'no')
这里的新列名为end_date_passed
。
我希望这有帮助。