ในชุดข้อมูลของฉัน ID สามารถปรากฏได้หนึ่งครั้ง สองครั้ง หรือสามครั้งขึ้นไป ฉันกำลังพยายามหาช่วงเวลาระหว่างแต่ละกรณีที่แตกต่างกันเหล่านี้ เช่น อะไรคือช่วงเวลาระหว่างการปรากฏตัวครั้งแรกและครั้งที่สองของ ID "AA" และอะไรคือช่วงเวลาระหว่างการปรากฏตัวครั้งแรกและครั้งที่สอง และการปรากฏตัวครั้งที่สองและสามของ ID "DD" เป็นต้น
นี่คือข้อมูลตัวอย่างบางส่วนที่จะแสดง:
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)))
ความคิดเริ่มแรกของฉันคือการกระจายข้อมูลโดยใช้ดัชนีและใช้ mutate
เพื่อหาความแตกต่าง:
test2 <- sampleData %>%
group_by(ID) %>%
mutate(index = row_number(ID)) %>%
spread(index, date) %>%
mutate(time_interval1_2 = interval(`1`, `2`))
อย่างไรก็ตาม หากใช้วิธีนี้ วันที่จะจบลงในแถวที่ต่างกัน ดังนั้นฉันจึงคำนวณความแตกต่างระหว่างแถวเหล่านี้ไม่ได้ แนวคิดใดๆ สำหรับวิธีแก้ปัญหาเล็กๆ น้อยๆ นี้โดยใช้ tidyverse
จะได้รับการชื่นชมอย่างมาก!
ขอบคุณล่วงหน้า.