我有一个大型的患者遭遇数据集(约600万)。每位患者可能在多年中每年都有多次入境。我希望能够按年排列患者,然后给他们编号,以便我可以过滤掉每个患者的除一年以外的所有记录,以便可以在特定的健康计划中对每个患者的第一年进行检查。
我能够对每个患者的第一个条目进行排名和过滤,但是我认为我必须根据在新数据框中使用%in%生成的两列来创建新的df和子集原始数据框。这是我遇到麻烦的地方。
虽然我经常使用堆栈溢出来查找问题的解决方案,但是我通常不会发布,因此如果我做得不好,请多多包涵。
enrolid<- c(223801,223801, 223801, 223801, 223801, 223803, 223803, 223804)
year<- c(2008, 2008, 2009, 2010, 2011, 2008, 2011, 2008)
service<- c( "CT", "Colonoscopy", "labs", "office_visit", "med", "office_vist", "hospitalization", "CT")
#But for 6 million enounters. I want to me extract the enrolid and first #year for each individual in my data set.
df1<-data.frame(enrolid, year, service)
df2<- df1 %>%
group_by(enrolid) %>%
filter(rank(year, ties.method="first")==1) %>%
mutate(enrollment_year_num = 1) %>%
select(enrolid, year)`
df1 %>%
filter_all(any_vars(. %in% df2)) #tried with df2$enrolid & df2year
感谢!
答案 0 :(得分:1)
您可以使用filter语句一步一步完成所有操作(确保year
是一个数字变量,此功能才能起作用)。
df1 %>%
group_by(enrolid) %>%
filter(year == min(year))
答案 1 :(得分:0)
还可以使用slice
:
df1 %>% group_by(enrolid) %>% slice(which.min(year))