Bagaimana cara menentukan interval tanggal/waktu antara pengelompokan variabel dengan panjang berbeda menggunakan rapiverse?

Dalam kumpulan data saya, ID dapat muncul sekali, dua kali, atau tiga kali atau lebih. Saya mencoba menghitung interval waktu antara masing-masing kejadian berbeda ini. yaitu Berapa interval antara kemunculan ID "AA" pertama dan kedua DAN berapa interval antara kemunculan ID "DD" pertama dan kedua, dan kedua dan ketiga, dll.

Berikut beberapa contoh data untuk diilustrasikan:

library(tidyverse)
library(lubridate)

set.seed(100)
ID <- c("AA", "AA", "AB", "AB", "AC", "AC", "AD", "DD", "DD", "DD", 
   "CA", "CA", "FS", "FS", "FS", "BA", "BA", "TZ", "TZ", "TZ")
rowNum <- c(1:20)
date <- c("2013-05-01", "2014-11-01", "2014-10-01", "2015-09-01", 
  "2014-10-01", "2015-09-01", "2016-01-01", "2017-02-01", "2013-08-01", 
  "2013-05-01", "2011-06-01", "2011-12-01", "2010-09-01", "2012-06-01", 
  "2013-12-01", "2015-01-01", "2015-09-01", "2015-02-01", "2016-04-01", 
  "2017-01-01")

sampleData <- as.data.frame(cbind(ID, rowNum, date)) %>%
  mutate(date = ymd(date)) %>%
  mutate(value_x = runif(length(ID))) %>%
  mutate(value_y = runif(length(ID))) %>%
  mutate(value_z = runif(length(ID))) 

Pikiran awal saya adalah menyebarkan data menggunakan indeks dan menggunakan mutate untuk mengetahui perbedaannya:

test2 <- sampleData %>%
   group_by(ID) %>%
   mutate(index = row_number(ID)) %>%
   spread(index, date) %>%
   mutate(time_interval1_2 = interval(`1`, `2`))

Namun dengan menggunakan pendekatan ini, tanggal-tanggal tersebut berakhir pada baris yang berbeda, jadi saya tidak dapat menghitung perbedaan di antara keduanya. Adakah ide tentang cara mengatasi masalah kecil ini menggunakan tidyverse akan sangat dihargai!

Terima kasih sebelumnya.


person vengefulsealion    schedule 04.10.2018    source sumber
comment
Jadi, apa keluaran yang Anda harapkan untuk data sampel yang Anda berikan?   -  person Maurits Evers    schedule 04.10.2018


Jawaban (1)


Perbedaannya ada pada kolom Diff.

library(tidyverse)
library(lubridate)

sampleData2 <- sampleData %>%
  arrange(ID, date) %>%
  group_by(ID) %>%
  mutate(Diff = date - lag(date)) %>%
  ungroup()

Data

set.seed(100)
ID <- c("AA", "AA", "AB", "AB", "AC", "AC", "AD", "DD", "DD", "DD", 
        "CA", "CA", "FS", "FS", "FS", "BA", "BA", "TZ", "TZ", "TZ")
rowNum <- c(1:20)
date <- c("2013-05-01", "2014-11-01", "2014-10-01", "2015-09-01", 
          "2014-10-01", "2015-09-01", "2016-01-01", "2017-02-01", "2013-08-01", 
          "2013-05-01", "2011-06-01", "2011-12-01", "2010-09-01", "2012-06-01", 
          "2013-12-01", "2015-01-01", "2015-09-01", "2015-02-01", "2016-04-01", 
          "2017-01-01")
person www    schedule 04.10.2018