我希望能够比较我拥有的数据帧中的行。
我的想法是,我应该比较ID号相同且VisitDate
列最多三天不同的行。我希望使用较晚的日期而不是较早的日期。
我的数据框:
id Date
1 12/05/06
1 16/05/06
1 17/05/06
4 12/05/06
4 13/05/06
3 12/05/06
5 12/05/06
66 12/05/06
66 13/05/06
66 19/05/06
66 24/05/06
66 25/05/06
我想要的数据框是
1 17/05/06
4 13/05/06
66 13/05/06
66 25/05/06
目前的代码是:
library(dplyr)
arrange(id, as.Date(data$Date, '%d/%m/%y')) %>%
#Search where two rows have the same hospital number
group_by(id) %>%
slice(which.max(Date))
但这并没有返回正确的数据。
答案 0 :(得分:0)
这似乎适用于案例样本,也许它适用于您的数据。 使用的数据:
data=data.frame(id=c(1,1,1,4,4,3,5,66,66,66,66,66),
Date=as.Date(c(1,5,6,1,2,1,1,1,2,8,13,14),origin = "2006-05-11"))
使用dplyr
library(dplyr)
data%>%
group_by(id)%>%
mutate(Diff=Date-lag(Date),n=n())%>%
filter((Date==max(Date) | Diff<3)&n>1 )%>%
select(id,Date)
id Date
<dbl> <date>
1 1 2006-05-17
2 4 2006-05-13
3 66 2006-05-13
4 66 2006-05-25
我们的想法是使用lag()
创建一个包含2个日期之间差异的列,并对此列进行过滤,以及每个ID的日期和日期数。
答案 1 :(得分:0)
library(data.table)
library(lubridate)
data = read.table(header = T, text = "
id Date
1 12/05/06
1 16/05/06
1 17/05/06
4 12/05/06
4 13/05/06
3 12/05/06
5 12/05/06
66 12/05/06
66 13/05/06
66 19/05/06
66 24/05/06
66 25/05/06
")
setDT(data)[, Date := dmy(Date)]
data[, Diff := {
lagged = shift(Date, n = 1, type = "lag")
delta = Date - lagged
}, by = id][Diff <= 3 & Diff > 0, .(id, Date)]