我有一个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
我的数据集是动态的,所以我希望编写一个函数来为那些独特的情况提取那些过滤的记录。目前我只是手动提取这些记录,我已经硬编码了一个解决方案,但这还不够。任何输入都非常感谢。
答案 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
你可以改进这一点,并在一行代码中完成。