从data.table中提取具有不同时间段的记录

时间:2016-10-04 13:29:11

标签: r

我有一个data.table,如下所示:

Date         ID     Institution
2015-08-01   55     12
2015-08-02   55     13
2015-08-03   55     12

基本上,我想要的是为他们进入一个机构的每个ID提取某些记录,退出该机构,然后返回他们输入的第一个机构的第一个机构。也就是说,在上面的例子中,我想得到以下内容:

Date         ID     Institution
2015-08-01   55     12
2015-08-03   55     12

我的数据集是动态的,所以我希望编写一个函数来为那些独特的情况提取那些过滤的记录。目前我只是手动提取这些记录,我已经硬编码了一个解决方案,但这还不够。任何输入都非常感谢。

1 个答案:

答案 0 :(得分:-1)

有点令人费解的答案,我仍然不是dplyr的专家:
示例数据:

df=data.frame(Date=as.Date(c(25,27,30,12,13,14,15,17,25),origin="2015-05-05"),
              ID=c(55,55,55,33,33,33,65,65,65),
              Institution=c(12,13,12,12,12,12,13,13,12))
        Date ID Institution
1 2015-05-30 55          12
2 2015-06-01 55          13
3 2015-06-04 55          12
4 2015-05-17 33          12
5 2015-05-18 33          12
6 2015-05-19 33          12
7 2015-05-20 65          13
8 2015-05-22 65          13
9 2015-05-30 65          12

使用包dplyr创建一个包含我们有2个(可以修改)不同机构的ID的tibble。
  library(dplyr) check=df%>%group_by(ID)%>%summarise(visited=n_distinct(Institution))%>%filter(visited==2) 然后我们使用这个tibble来检索这些的日期,ID和机构:

df[df$ID%in%check$ID,]%>%distinct(ID,Institution,.keep_all=T)
        Date ID Institution
1 2015-05-30 55          12
2 2015-06-01 55          13
3 2015-05-20 65          13
4 2015-05-30 65          12

你可以改进这一点,并在一行代码中完成。