【问题标题】:Calculating time between different rows计算不同行之间的时间
【发布时间】:2021-08-20 15:43:21
【问题描述】:

我在想出一个解决方案来计算不在同一行中的两个日期之间的时间差时遇到问题。例如我有以下数据:

dates_edited          end_fast_c        start_fast_c
1         4/1/21 2021-04-01 12:00:00 2021-04-01 21:30:00
2         4/2/21 2021-04-02 12:30:00 2021-04-02 23:30:00

我使用的是mutate(hours_fasted = difftime(start_fast_c,end_fast_c)) 这只会在同一行之间计算。有没有办法让我计算第 2 行和第 1 行之间的时间,以便我可以计算 2021-04-01 21:30 和 2021-04-02 12:30 之间的时间?

【问题讨论】:

标签: r


【解决方案1】:

您可以按照 camille 的建议使用 difftime

如果您的日期时间不是dttm 格式,您可以使用ymd_hms 包中的ymd_hms 函数

使用 dplyr 包中的窗口函数 lag 可以计算下面一行的差异。

添加 units 参数,您可以在几分钟内获得 mins 或小时内的差异 hours 等...

library(lubridate)
library(dplyr)
df %>% 
    mutate(across(ends_with("_c"), ymd_hms)) %>% 
    mutate(time_diff_min = difftime(end_fast_c, lag(start_fast_c), units = "mins"))
  dates_edited end_fast_c          start_fast_c        time_diff_min
  <chr>        <dttm>              <dttm>              <drtn>       
1 4/1/21       2021-04-01 12:00:00 2021-04-01 21:30:00  NA mins     
2 4/2/21       2021-04-02 12:30:00 2021-04-02 23:30:00 900 mins

【讨论】:

    【解决方案2】:

    您可以在电子表格中生成工作表并使用公式和数据填充它,然后如果工作表不是您的首选输出,则以编程方式检索结果。

    在 Google 表格(可能还有其他表格)中,您可以使用“123”下拉菜单将计算单元格标记为“持续时间”。

    我在 A1、A2 和 B1 B2 中输入了您的四个时间值,更改了它们的显示格式以确保它们输入正确。

    然后在单元格 C1 中我输入公式 B1-A2 并得到 9:00:00

    单元格 C1 可以采用不同的格式和\或显然用作进一步公式的来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多