【问题标题】:How come difftime() gives me answers way out of proportion?为什么 difftime() 给我的答案不成比例?
【发布时间】:2019-08-16 23:53:47
【问题描述】:

我有日期时间值,我想计算差异。我尝试在两次之间使用-,如t1 - t2,但它会切换单位。有些输出在几分钟内,有些在几小时内,有些在几天内 - 这使得它很难处理。

我使用了 lubridate 的 difftime,它给了我没有意义的结果。

my_tibble %>%
    mutate(time_diff = difftime(t2, t1, units = "mins")) 

   t1                       t2           time_diff           
   <dttm>              <dttm>              <drtn>          
 1 2018-06-30 18:26:28 2018-07-01 01:26:43   0.2342667 mins
 2 2018-06-30 19:33:03 2018-07-01 09:36:56 423.8818500 mins
 3 2018-06-30 19:32:51 2018-07-01 02:33:41   0.8219833 mins
 4 2018-06-30 23:09:59 2018-07-01 06:11:45   1.7654167 mins
 5 2018-06-30 23:22:30 2018-07-01 06:23:00   0.4852000 mins

这里有更多信息。

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   6 obs. of  1 variable:
 $ t1: POSIXct, format: "2018-07-01 01:26:43" "2018-07-01 09:36:56" "2018-07-01 02:33:41" "2018-07-01 06:11:45"

对于它的价值,该文件来自一个 CSV,其时间 t1 定义为自 unix 纪元以来的毫秒数。这是我在数据框中读取的方式。

my_tibble <- read_csv("table.csv") %>% 
  mutate(t1 = as.POSIXct(epoch_milli / 1000, origin="1970-01-01")) %>%
  mutate_if(is.numeric, as.character) %>% 
        as_tibble()

【问题讨论】:

  • Cauder,如果这是您的代码,那么您无法生成该输出(缺少引号)。如果不是您的代码,请更正。无论哪种方式,将其与“未提供样本数据”结合起来,您的问题很可能会被关闭。
  • 这是我得到的输出。我卸载了所有的包,除了 tidyverse。
  • 感谢您修复代码,很高兴听到这不是问题所在。您说“有些以小时为单位,有些以天为单位”,但您在此处的示例数据仅显示几分钟。我无法重现您的“分钟/天”问题,而且我不明白这个输出有什么意义。也许您可以清楚地显示您期望的输出是什么?
  • 我希望输出是正确的分钟数。
  • 这很明显,但它们应该是什么?我们没有任何时区,所以我猜您的 t2 字段是不同的区域(不知道您是如何获得或制作该字段的)。意识到您在问题中的示例框架是模棱两可的:它没有显示毫秒或 tz。您能否 (1) 提供来自 dput(head(my_tibble)) 的输出,或者 (2) 提供来自 table.csv 的样本以及生成 t2 的代码?

标签: r lubridate


【解决方案1】:

正确引用"mins ("mins") 后无法重现该问题。另外,difftime 是一个 base R 函数

library(dplyr)
my_tibble %>%
     mutate(time_diff = difftime(t2, t1, units = "mins")) 
# A tibble: 5 x 3
#  t1                  t2                  time_diff    
#  <dttm>              <dttm>              <drtn>       
#1 2018-06-30 18:26:28 2018-07-01 01:26:43 420.2500 mins
#2 2018-06-30 19:33:03 2018-07-01 09:36:56 843.8833 mins
#3 2018-06-30 19:32:51 2018-07-01 02:33:41 420.8333 mins
#4 2018-06-30 23:09:59 2018-07-01 06:11:45 421.7667 mins
#5 2018-06-30 23:22:30 2018-07-01 06:23:00 420.5000 mins

数据

my_tibble <- structure(list(t1 = structure(c(1530383188, 1530387183, 1530387171, 
1530400199, 1530400950), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    t2 = structure(c(1530408403, 1530437816, 1530412421, 1530425505, 
    1530426180), class = c("POSIXct", "POSIXt"), tzone = "UTC")), 
     row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-18
    • 2019-09-19
    • 2016-03-31
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多