Как вы агрегируете строки и выбираете значение для конкретной даты c? - PullRequest
1 голос
/ 31 марта 2020

Вчера я задал вопрос здесь о том, как объединить несколько строк в фактор с тремя уровнями. Это исправлено! Тем не менее, мой руководитель также хочет создать второй фрейм данных. Я объясню свой фрейм данных:

Мои данные содержат участников, которые имеют несколько строк. Существуют разные типы переменных (например, возраст, дата, факторные переменные и т. Д. c.). Я агрегировал данные так, чтобы у каждого участника была одна строка со следующим кодом

example4 <- SMARTdata_50j_diagc_2016  %>% 
  group_by( Patient_Id ) %>%  
  summarise( Groep = first( Groep ),
             Ziekenhuis_Nr = first( Ziekenhuis_Nr ),
             Ziekenhuistype = first( Ziekenhuistype ),
             aantalDBC = n(),
             aantalVervolg = sum( as.numeric( ifelse( Zorgtype_Code == 0, 0, 1 ) ) ),
             Diagnose_code = case_when( 
               all( Diagnose_Code == 1 ) ~ 1,
               all( Diagnose_Code == 0 ) ~ 0, 
               TRUE ~ 2 ),
             Leeftijd = mean( Lft_patient_openenDBC ),
             Geslacht = first( Geslacht ),
             MRI_nee_ja = max( ifelse( MRI_nee_ja == 0, 0, 1 ) ),
             aantalMRI = sum( MRI_Aantal ),
             Artroscopie_nee_ja = max( ifelse( Artroscopie_nee_jaz_jam == 0, 0, 1 ) ),
             aantalArtroscopie = sum( Artroscopie_aantal ),
             overigDBC = mean( Aantal_overigeDBC_bijopenen ),
             DBC_open = min( open_DBC ), 
             DBC_sluiten = max( sluiten_DBC ) ) %>% 
  as.data.frame()

Этот код правильный и работает. Как видите, для «Diagnose_code» есть три значения (см. здесь ). Участник, который имеет значение 2 в этом новом кадре данных, в действительности имеет значение 0 и 1 в исходном кадре данных. Мой руководитель хочет создать второй фрейм данных, где вместо тех участников, которые получают значение 2, они получают значение, связанное с последней датой open_DB C. Переменная open_DB C является типом yearmon.

Я думал о том, чтобы воспользоваться советом, который я получил вчера, и работать с case_when, что-то вроде

Diagnose_code = case_when( 
               all( Diagnose_Code == 1 ) ~ 1,
               all( Diagnose_Code == 0 ) ~ 0, 
               TRUE ~ Diagnose_Code[, max( open_DBC )] ) 

, но это не правильно. Я не уверен, как мне выбрать значение Diagnose_Code, которое относится к максимальной дате open_DB C. Кто-нибудь знает, как решить эту проблему? Заранее спасибо!

1 Ответ

1 голос
/ 31 марта 2020

Использование which.max:

Diagnose_code = case_when( 
       all( Diagnose_Code == 1 ) ~ 1,
       all(Diagnose_Code == 0 ) ~ 0, 
       TRUE ~ Diagnose_Code[which.max(open_DBC)])

Или:

 Diagnose_code = case_when( 
     all( Diagnose_Code == 1 ) ~ 1,
     all( Diagnose_Code == 0 ) ~ 0, 
    TRUE ~ Diagnose_Code[open_DBC == max(open_DBC)])
...