【问题标题】:How do you aggregate rows and pick the value for a specific date?您如何聚合行并选择特定日期的值?
【发布时间】:2020-07-11 18:09:52
【问题描述】:

昨天我问了一个问题 here 关于如何将多行聚合成一个具有三个级别的因子。这是固定的!但是,我的主管也想制作第二个数据框。我将解释我的数据框:

我的数据包含具有多行的参与者。有不同的变量类型(例如,年龄、日期、因素变量等)。我已经汇总了数据,以便每个参与者都有一行包含以下代码

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”,存在三个值(参见here)。在这个新数据帧中具有值 2 的参与者实际上在原始数据帧中具有 0 和 1 的值。我的主管想要制作第二个数据框,而不是那些参与者获得值 2,而是获得与 open_DBC 的最新日期相关联的值。变量 open_DBC 是“yearmon”类型。

我一直在考虑使用我昨天得到的建议并使用 case_when,比如

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

但这是不正确的。我不确定应该如何选择属于 open_DBC 最大日期的 Diagnose_Code 值。有谁知道如何解决这个问题?先感谢您!

【问题讨论】:

    标签: r date dplyr aggregate


    【解决方案1】:

    使用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)])
    

    【讨论】:

    • 谢谢!我会立即尝试!
    • 我很抱歉,起初我遇到了一个错误,但那是由于我的变量的类型。我改了,你的建议奏效了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2020-04-16
    • 2023-03-19
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多