【发布时间】:2018-10-04 00:45:34
【问题描述】:
在我的数据集中,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 解决这个小问题的想法将不胜感激!
提前致谢。
【问题讨论】:
-
那么对于您提供的示例数据,您的预期输出是什么?