在行之间使用dplyr的difftime [英] difftime between rows using dplyr

查看:71
本文介绍了在行之间使用dplyr的difftime的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用dplyr包计算两个相邻行中两个时间戳之间的时间差.这是代码:

I'm trying to calculate the time difference between two timestamps in two adjacent rows using the dplyr package. Here's the code:

    tidy_ex <- function () {

    library(dplyr)

    #construct example data
    data <- data.frame(code = c(10888, 10888, 10888, 10888, 10888, 10888, 
                                    10889, 10889, 10889, 10889, 10889, 10889,
                                    10890, 10890, 10890),
                           station = c("F1", "F3", "F4", "F5", "L5", "L7", "F1",
                                       "F3", "F4", "L5", "L6", "L7", "F1", "F3", "F5"),
                           timestamp = c(1365895151, 1365969188, 1366105495,
                                           1367433149, 1368005216, 1368011698,
                                           1366244224, 1366414926, 1367513240,
                                           1367790556, 1367946420, 1367923973,
                                           1365896546, 1365907968, 1366144207))

    # reformat timestamp as POSIXct
    data$timestamp <- as.POSIXct(data$timestamp,origin = "1970-01-01")

    #create tbl_df
    data2 <- tbl_df(data)

    #group by code and calculate time differences between two rows in timestamp column 
    data2 <- data2 %>%
            group_by(code) %>%
            mutate(diff = c(difftime(tail(timestamp, -1), head(timestamp, -1))))

    data2

    }

代码产生错误消息:

 Error: incompatible size (5), expecting 6 (the group size) or 1

我猜这是因为最后一行的差异产生了NA(因为没有其他相邻的行).但是difftime/head-tails方法可与plyr软件包一起使用,而不是与dplyr

I guess that's because the difference for the last row produces an NA (since there is no further adjacent row). The difftime/head-tails method however works with the plyr package instead of dplyr (see this StackOverflow post)

如何使用dplyr使其正常工作?

How can I get it to work using dplyr?

推荐答案

感谢维克多(Victorp)的建议.我将变异行更改为:

Thanks to Victorp for the suggestion. I changed the mutate line to:

mutate(diff = c(difftime(tail(timestamp, -1), head(timestamp, -1)),0))

(我将0放置在末尾,因此差值计算将从第一行开始).

(The 0 I placed at the end so the difference calculation would start in the first row).

这篇关于在行之间使用dplyr的difftime的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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