Расчет интервала времени на основе последовательных строк, которые являются дубликатами - PullRequest
1 голос
/ 27 мая 2020

Цель Я хочу узнать, как долго каждый пользователь изучает общий временной ряд, вместе взятый.

Проблема Основываясь на данных ниже, я не знаю как получить общую продолжительность обучения каждого пользователя? Тем более, что каждый раз, когда место меняется или возникает большой временной промежуток, начинается новая последовательность.

Некоторые пояснения Данные для отметок времени и местоположения записываются человеком, у которого есть телефон. Время от времени телефон записывает время и местонахождение этого человека. Следовательно, можно рассматривать данные одного пользователя как временную последовательность, когда местоположение не меняется.

Технически отметка времени в реальном наборе данных - это отметка времени unix, а набор данных очень большой:

uid <- c(1,1,1,1,2,2,2,3,3,3,2,2,1,3,2,2,2,1)
timestamp <- c(1,4,5,7,3,8,15,1,2,3,300,305,600,150,410,413,415,800)
location <- c("Library1","library1","library2","library2","library1","library2","library2",
              "library2","library2","library2","library4","library4","library4","library3",
              "library2","library1","library1","library1")
df <- cbind(uid,timestamp,location)

# Desired Output
uid.output <- c(1,2,3)
study.duration <- c(5,14,2)
df.output <- cbind(uid.output,study.duration)

Любая помощь будет очень признательна!

1 Ответ

0 голосов
/ 28 мая 2020

Вы можете попробовать что-то вроде:

library(data.table)
setDT(df)[, lri := rleid(location), uid][, 
    .(duration=sum(.SD[, timestamp[.N] - timestamp[1L], lri]$V1)), uid]

вывод:

   uid duration
1:   1        5
2:   2       14
3:   3        2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...