R中两个(据称)相同的日期对象不相等?

时间:2015-02-12 18:52:28

标签: r date

我有一个简单的问题。我在R中有两个Date对象应该是相同的(它们具有相同的值和类),但R表示它们不相等。我在Linux上运行虽然我在Windows机器上得到了相同的结果。为什么会这样?

代码:

start=as.Date("2014-12-31")
finish=as.Date("2014-11-28")
dates = seq(start,finish,length=6)
christmasEve = as.Date("2014-12-24")
print(dates[2])
print(christmasEve)
print(class(dates[2]))
print(class(christmasEve))
(christmasEve==dates[2])

输出:

[1] "2014-12-24"
[1] "2014-12-24"
[1] "Date"
[1] "Date"
[1] FALSE

非常感谢任何帮助!

-Paul

3 个答案:

答案 0 :(得分:2)

问题在于你将天数除以六乘六的倍数。退房:

as.numeric(dates)
# [1] 16435.0 16428.4 16421.8 16415.2 16408.6 16402.0

start - finish
# Time difference of 33 days

答案 1 :(得分:2)

由于您将日期创建为序列,因此日期不是精确的整数。

> as.numeric(dates)
[1] 16435.0 16428.4 16421.8 16415.2 16408.6 16402.0
> as.numeric(christmasEve)
[1] 16428
> as.character(christmasEve) == as.character(dates[2])
[1] TRUE

答案 2 :(得分:0)

由于没有sampleRate,因此无法测试您的代码。我假设sampleRate是6.您可以将您的日期与以下代码进行比较:

all(as.character(christmasEve) == as.character(dates[2]))

整个事情应该像那样工作

> sampleRate <- 6
> 
> start=as.Date("2014-12-31")
> finish=as.Date("2014-11-28")
> dates = seq(start,finish,length=sampleRate)
> christmasEve = as.Date("2014-12-24")
> print(dates[2])
[1] "2014-12-24"
> print(christmasEve)
[1] "2014-12-24"
> print(class(dates[2]))
[1] "Date"
> print(class(christmasEve))
[1] "Date"
> (christmasEve==dates[2])
[1] FALSE
> 
> all(christmasEve == dates[2])
[1] FALSE
> all(as.character(christmasEve) == as.character(dates[2])
+ )
[1] TRUE