根据另一个变量的值计算观察值之间的差异

时间:2019-01-22 09:39:32

标签: r dplyr transformation mutate logfile

我有一个应用程序记录,想计算两个特定事件之间的时间。

我的记录结构如下:

    appdata <- data.frame(userid = c(1,1,1,1,1), dayid = c(32,32,32,32,32), activity = c("appstart","levelup","appclose","appstart","appclose"), datesec = c(2670,2726,2755,2787,4161))

    appdata
      userid dayid activity datesec
    1      1    32 appstart    2670
    2      1    32  levelup    2726
    3      1    32 appclose    2755
    4      1    32 appstart    2787
    5      1    32 appclose    4161

我想知道用户活动了多长时间。因此,我必须计算每个appstart和appclose之间的差异,然后构建总和,因此在这里:(2755-2670)+(4161-2755)= 1459。

新数据集应如下所示:

    appdata2 <- data.frame(user = c(1), dayid = c(32), usagetime_in_sec = c(1491))

    appdata2
      user dayid usagetime_in_sec
     1    1    32             1459

这是我的基本方法,但是我不知道如何告诉R始终计算appstart和下一个appclose事件之间的差:

    apdata2 <- appdata %>% 
      group_by(userid, dayid) %>%
      summarise(usagetime_in_sec = sum(datsec(type == "appclose") - datesec(type == "appstart")))

1 个答案:

答案 0 :(得分:3)

您非常亲密。我认为您需要类似的东西

library(dplyr)

appdata %>%
  group_by(userid, dayid) %>%
  summarise(usagetime_in_sec = sum(datesec[activity == "appclose"] - 
                                   datesec[activity == "appstart"]))


#   userid dayid usagetime_in_sec
#    <dbl> <dbl>            <dbl>
#1      1    32             1459

但是,请确保您拥有相等数量的“ appclose”和“ appstart” activity,否则可能会使计算混乱。