根据另一个数据帧中的两列选择数据帧中的列子集

问题描述 投票:0回答:2

我有大量的患者遭遇数据(约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

Thnaks!

r filter subset
2个回答
1
投票

您可以使用filter语句一步完成所有操作(确保year是一个数值变量,以便它可以工作)。

df1 %>%
 group_by(enrolid) %>%
 filter(year == min(year))

0
投票

也可以使用slice

df1 %>% group_by(enrolid) %>% slice(which.min(year))

© www.soinside.com 2019 - 2024. All rights reserved.