#r #filter #subset
#r #Фильтр #подмножество
Вопрос:
У меня есть большой набор данных о встречах с пациентами (~ 6 миллионов). У каждого пациента может быть несколько записей каждый год в течение нескольких лет. Я хотел бы иметь возможность упорядочить пациентов по годам, а затем пронумеровать их, чтобы я мог отфильтровать все, кроме одного года, для каждого пациента, чтобы я мог просмотреть каждого пациента за их первый год в конкретном плане медицинского обслуживания.
Я могу ранжировать и отфильтровывать первую запись для каждого пациента, однако я думал, что мне придется создать новый df и подмножество исходного фрейма данных на основе двух столбцов, сгенерированных в моем новом фрейме данных, используя %в%. Вот тут-то у меня и возникают проблемы.
Хотя я часто использую stack overflow для поиска решений своих вопросов, я обычно не публикую сообщения, так что потерпите, если я делаю это неправильно.
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 amp; df2year
Спасибо!
Ответ №1:
Вы можете просто сделать все это за один шаг с помощью инструкции filter (убедитесь, что year
для этого используется числовая переменная).
df1 %>%
group_by(enrolid) %>%
filter(year == min(year))
Ответ №2:
Также можно использовать slice
:
df1 %>% group_by(enrolid) %>% slice(which.min(year))