【发布时间】: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的代码?