计算同一组中的时差 [英] calculate time difference in the same group

查看:78
本文介绍了计算同一组中的时差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将列 time 转换为时间十进制格式,然后在 user_id 的每组中找到时间间隔.我已经尝试过以下答案,但是无法正常工作:

I want to convert the column time to be in time decimal format and then find the time interval within each group of the user_id. I have tried the answer below, but I could not get it to work:

同一日期的天数差异R

structure(list(question_id = c(5502L, 5502L, 5502L, 5502L, 5502L
), user_id = c(112197L, 112197L, 112197L, 114033L, 114033L), 
    time = structure(c(1603720173, 1603720388, 1603720702, 1603603115, 
    1603949442), class = c("POSIXct", "POSIXt"), tzone = ""), 
    prediction = c(0.9, 0.95, 0.9, 0.99, 0.94), log_score = c(0.84799690655495, 
    0.925999418556223, 0.84799690655495, 0.985500430304885, 0.910732661902913
    )), row.names = 156182:156186, class = "data.frame")

推荐答案

library(tidyverse)
library(lubridate)

df <- tibble::tribble(
  ~question_id, ~user_id, ~time, ~prediction, ~log_score,
  5502L,  112197L, "2020-10-26 14:49:33",         0.9,  0.84799690655495,
  5502L,  112197L, "2020-10-26 14:53:08",        0.95, 0.925999418556223,
  5502L,  112197L, "2020-10-26 14:58:22",         0.9,  0.84799690655495,
  5502L,  114033L, "2020-10-25 06:18:35",        0.99, 0.985500430304885,
  5502L,  114033L, "2020-10-29 06:30:42",        0.94, 0.910732661902913
)

df %>%
  as_tibble() %>%
  mutate(time = lubridate::ymd_hms(time)) %>%
  group_by(user_id) %>%
  mutate(diff = time - lag(time),
         diff2 = hms::hms(seconds_to_period(diff)))
#> # A tibble: 5 x 7
#> # Groups:   user_id [2]
#>   question_id user_id time                prediction log_score diff        diff2   
#>         <int>   <int> <dttm>                   <dbl>     <dbl> <drtn>      <time>  
#> 1        5502  112197 2020-10-26 14:49:33       0.9      0.848     NA secs       NA
#> 2        5502  112197 2020-10-26 14:53:08       0.95     0.926    215 secs 00:03:35
#> 3        5502  112197 2020-10-26 14:58:22       0.9      0.848    314 secs 00:05:14
#> 4        5502  114033 2020-10-25 06:18:35       0.99     0.986     NA secs       NA
#> 5        5502  114033 2020-10-29 06:30:42       0.94     0.911 346327 secs 96:12:07

这篇关于计算同一组中的时差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆