我知道之前已经问过,但我发现的答案似乎依赖于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”
答案 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()