比较R

时间:2016-10-15 06:46:31

标签: r

我希望能够比较我拥有的数据帧中的行。

我的想法是,我应该比较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))

但这并没有返回正确的数据。

2 个答案:

答案 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)]