我有一个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())
现在该怎么办?
答案 0 :(得分:1)
错误来自于您正在尝试比较不同类的两个对象。对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)
的原因。这意味着它是logical
值的R向量。但由于它是空的,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
。
我希望这会有所帮助。