【问题标题】:Issues with compare time differences to 0 and return T/F将时间差与 0 比较并返回 T/F 的问题
【发布时间】:2016-10-18 05:19:20
【问题描述】:

我有如下日期数据:

date = {"2008-05-13", "2008-05-14", "2008-05-15", "2008-05-16", "2008-05-19", "2008-05-20", "2008-05-21", "2008-05-22", "2008-05-23", "2008-11-17"}

我想比较日期每天与2008-05-13 的差异是否为0。

我使用了以下代码:2008-05-13 存储在dates[1,4](另一个数据)

(dates[1,4] - date)) != (dates[1,4] - dates[1,4])

但是这种情况总是让我返回 true,我不知道为什么会这样。以下是我尝试过的另一个代码,它也总是正确的。

 (dates[1,4] - date)) != 0

如果有人能告诉我发生了什么,将不胜感激。

【问题讨论】:

  • 首先,您需要在 R 中包含 c(...),而不是 {...}。其次,您必须使用 date <- as.Date(date) 转换为 Date 类。然后你可以有效地使用减法/difftime

标签: r date data-manipulation


【解决方案1】:

您忘记使用as.Date 函数将日期设置为日期。此外,您在 R 中使用c() 定义了一个向量。改用这个:

 date  <- as.Date("2008-05-13")
 dates <- as.Date(c("2008-05-13", "2008-05-14" ,"2008-05-15" ,"2008-05-16" ,"2008-05-19" ,"2008-05-20" ,"2008-05-21", "2008-05-22", "2008-05-23", "2008-11-17"))

dates - date != 0
[1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

由于您只使用基于YYYY-MM-DD 而不是YYYY-MM-DD HH-MM-SS 的日期,因此您也可以只比较字符而不将其转换为日期:

date  <- "2008-05-13"
dates <- c("2008-05-13", "2008-05-14" ,"2008-05-15" ,"2008-05-16" ,"2008-05-19" ,"2008-05-20" ,"2008-05-21", "2008-05-22", "2008-05-23", "2008-11-17")

dates != date 
[1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

但是,只有当您确定所有日期的格式都与 alistaire 的评论所指示的格式相同时,您才应该使用第二种方法。

【讨论】:

  • 你应该小心第二种方法;日期可以有很多不同的格式,如果它们不匹配,它就会中断。更好地解析到适当的类。
【解决方案2】:

试试这个:

date =c("2008-05-13", "2008-05-14" ,"2008-05-15" ,"2008-05-16" ,"2008-05-19" ,"2008-05-20" ,"2008-05-21", "2008-05-22", "2008-05-23", "2008-11-17") 
as.Date(date) - as.Date('2008-05-13') == 0
[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

【讨论】:

  • 在这个具体示例中,您甚至不需要通过as.Date 进行显式转换(尽管这样做可能很有意义!)difftime(date, "2008-05-13") == 0
  • 但是当我尝试 min(abs(as.Date(dates[1,4])- as.Date(sp$date))) == 0.. 这仍然返回我 T 而 sp $date 不同 2008-05-13
  • 假设您的 sp$date 包含一个日期列表,包括 2008-05-13,那么所有绝对差的最小值将为零,并且表达式将计算为 T,这不是预期的吗?跨度>
【解决方案3】:

在 R 中有一个叫做 difftime 的函数。这是你可以做到的最简单的方法。

> date = as.Date(c("2008-05-13", "2008-05-14" ,"2008-05-15" ,"2008-05-16" ,"2008-05-19" ,"2008-05-20" ,"2008-05-21", "2008-05-22", "2008-05-23", "2008-11-17"))
> compare <- as.Date("2008-05-13")
> 
> x <- difftime(date, compare,units = "days")
> x
Time differences in days
[1]   0   1   2   3   6   7   8   9  10 188

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多