Can you make dplyr::mutate and dplyr::lag default = its own input value?

前端 未结 3 1447
醉酒成梦
醉酒成梦 2021-01-06 02:01

This is similar to this dplyr lag post, and this dplyr mutate lag post, but neither of those ask this question about defaulting to the input value. I am using dplyr to muta

3条回答
  •  梦谈多话
    2021-01-06 02:52

    I think Frank's solution works pretty well. Here is the complete example:


    library(dplyr, warn.conflicts = F)
    
    test <- data.frame(ip=c("192.168.1.2","192.168.1.2","192.168.1.4","192.168.1.4","192.168.1.4","192.168.1.7"),
                       hour=c(2017070700,2017070700,2017070700,2017070701,2017070702,2017070700),
                       snap=c(0,15,0,45,30,15))
    
    
    test %>%
      mutate(snap = formatC(snap, width = 2, flag = 0)) %>%
      mutate(fulldateint = paste(hour, snap, sep = "")) %>%
      mutate(fulldate = as.POSIXct(strptime(fulldateint, "%Y%m%d%H%M"))) %>%
      group_by(ip) %>%
      mutate(shifted = lag(fulldate, default = first(fulldate))) %>%
      mutate(diff = fulldate - shifted) %>% 
      ungroup() %>% 
      select(ip, fulldate, shifted, diff)
    
    #> # A tibble: 6 x 4
    #>            ip            fulldate             shifted      diff
    #>                                        

提交回复
热议问题