【问题标题】:Difference in dates using sqldf in R在 R 中使用 sqldf 的日期差异
【发布时间】:2016-08-09 15:30:18
【问题描述】:

我在数据框中有两列需要计算时间差。数据为城市公开数据中的本地PD数据。下面是一栏

TimeDispatch             
01/01/2011 12:00:37 AM   

TimeArrive
01/01/2011 12:21:31 AM

还有一些缺失值的 TimeArrival,因为每次调度都不需要警察到达。

我正在尝试在 R 中使用 sqldf 来找出不同之处,但它说这个错误

Error in sqliteSendQuery(conn, statement, bind.data) : 
  RAW() can only be applied to a 'raw', not a 'double'
In addition: Warning message:
In sqliteSendQuery(con, statement, bind.data) :
  Closing result set with pending rows

有帮助吗?

【问题讨论】:

  • 有必要在sqldf的帮助下做吗?
  • 能否请您发布您正在使用的查询?
  • total$TimeDispatched
  • 您也可以不使用sqldf 对它们进行分组。
  • 谢谢Kunal,我确实解决了。其实很简单。转换后,我只是用了一个as.integer函数,然后用group by。

标签: r date sqldf


【解决方案1】:

我真的找到了答案。只需使用as.integer() 将 difftime 变量转换为整数。我阅读了许多博客,但在任何地方都找不到答案,因此我将答案发布以供将来参考

【讨论】:

    【解决方案2】:

    从cmets到问题,问题不在于如何使用sqlite计算两次之间的差异。在将它们发送到 sqlite 之前,时间已经不同了,问题是生成的 "difftime" 类列在发送到 sqlite 时被转换为数字,当它被检索回 R 时,sqldf 不知道如何将该数字转换回"difftime" 类对象,因为它不知道要使用哪些单位。

    这里有一个独立的例子来说明:

    library(sqldf)
    
    now <- Sys.time()
    now2 <- now + 1
    dif <- difftime(now2, now)
    DF <- data.frame(dif)
    
    sqldf("select * from DF")
    ## Error in asfn(rs[[i]]) : need explicit units for numeric conversion
    

    有几种方法:

    1) 首先不要使用"difftime" 对象。使用秒数或分钟数或其他数字变量:

    DF1 <- data.frame(dif = as.numeric(dif))
    sqldf("select * from DF1")
    
    ##   dif
    ## 1   1
    

    2) 在 SQL 中而不是在 R 中执行差分,这样一开始就不会创建 "difftime" 列:

    DF2 <- data.frame(now, now2)
    sqldf("select now2 - now as dif from DF2")
    
    ##   dif
    ## 1   1
    

    3) 使用sqldf(..., method = "raw") 防止它尝试转换回"difftime" 类:

    sqldf("select * from DF")
    
    ##   dif
    ## 1   1
    

    4) 确保在输出中重命名原始"difftime" 列,使其无法与原始"difftime" 列关联,因此分配类的启发式算法不会尝试转换它。

    sqldf("select dif as dif2 from DF")
    
    ##   dif2
    ## 1    1
    

    5)使用sqldf的name__class方法(注意双下划线指定要转换为的类:

    sqldf("select dif as dif__numeric from DF", method = "name__class")
    
    ##   dif
    ## 1   1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-14
      • 2018-10-01
      • 2017-06-27
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多