查找连续行

时间:2016-06-25 06:54:04

标签: r

我知道之前已经问过,但我发现的答案似乎依赖于POSIXct而我不明白为什么我不能用日期来做这件事

我有像

这样的数据
Person Event VisitDate
1       RFA   2004-06-04
1       EMR   2016-06-03
1       Nil   2016-06-05

我希望在单独的列中获得日期之间的差异(最终平均所有Person ID的日期差异)。

预期产出:

人事件访问日期日期差异     1 RFA 2004-06-04
    1 EMR 2016-06-03 4383     1无2016-06-05 2

到目前为止,我已经使用过:

EndoSubsetOnSurveil %>% 
  arrange(Person, as.Date(EndoSubsetOnSurveil$VisitDate, '%d/%m/%y')) %>%
  difftime(VisitDate[1:(length(VisitDate)-1)] , VisitDate[2:length(VisitDate)])

但我收到了错误

Error in as.POSIXct.default(time1, tz = tz) : 
  do not know how to convert 'time1' to class “POSIXct”

1 个答案:

答案 0 :(得分:5)

<强>解释

(i)as.Date中提供的格式应更改为%Y-%m-%d。 (ii)如果您希望将变量识别为,则应将变量更改为as.Date。在您的代码中,它仅用于排列数据库,但稍后无法识别。 (iii)使用滞后使得更有用。

<强>代码:

我认为与第二个块相比,最后一个块输出是你想要的。

# SAMPLE DATA -------------------------------------------------------------  
EndoSubsetOnSurveil <-
  data.frame(Person = c(1,1,2,2), 
             VisitDate = c("2004-06-04", "2016-06-03", "2016-07-01",
                           "2016-08-01"))
EndoSubsetOnSurveil$VisitDate <-
  as.Date(EndoSubsetOnSurveil$VisitDate, '%Y-%m-%d')

# DIFFERENCE BETWEEN VISIT WITHOUT GROUPING -------------------------------  
library(dplyr)
EndoSubsetOnSurveil %>% arrange(Person, VisitDate) %>%
  mutate(diffDate = difftime(VisitDate, lag(VisitDate,1)))

# DIFFERENCE BETWEEN VISIT BY PATIENT -------------------------------------  
EndoSubsetOnSurveil %>% arrange(Person, VisitDate) %>% group_by(Person) %>%
  mutate(diffDate = difftime(VisitDate, lag(VisitDate,1))) %>% ungroup()