【问题标题】:How to group data by column and apply a self-defined function to each small group如何按列对数据进行分组并将自定义函数应用于每个小组
【发布时间】:2016-03-21 19:20:21
【问题描述】:

我有一个药物数据集,其中包含有关每位患者及其所用药物的信息:

              Record.ID            Label.Name        Generic.Medication.Name Strength Quantity Days.Supplied Date.of.Fill   GCN GC3         NDC category
    4      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    30000            30   2014-06-18 19154 M4D 00310075290  statins
    5      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    90000            90   2014-06-25 19154 M4D 00310075290  statins
    6      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    90000            90   2014-09-30 19154 M4D 00310075290  statins
    7      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    90000            90   2014-12-18 19154 M4D 00310075290  statins
    8      aaaaa            CRESTOR TAB 10 MG ROSUVASTATIN CALCIUM TAB 10 MG    10 MG    90000            90   2014-12-18 19153 M4D 00310075190  statins
    60     bbbbb        TELMISARTAN TAB 20 MG          TELMISARTAN TAB 20 MG    20 MG    90000            90   2014-01-24 23833 A4F 00054054218     RASA
    61     bbbbb        TELMISARTAN TAB 20 MG          TELMISARTAN TAB 20 MG    20 MG    90000            90   2014-04-03 23833 A4F 00054054218     RASA
    62     bbbbb        TELMISARTAN TAB 20 MG          TELMISARTAN TAB 20 MG    20 MG    90000            90   2014-07-21 23833 A4F 00054054218     RASA
    63     bbbbb        TELMISARTAN TAB 20 MG          TELMISARTAN TAB 20 MG    20 MG    90000            90   2014-10-22 23833 A4F 00054054218     RASA
    66     ccccc ENALAPRIL MALEATE TAB 2.5 MG   ENALAPRIL MALEATE TAB 2.5 MG   2.5 MG    15000            30   2014-01-06   963 A4D 00378105101     RASA

我有一个名为 calc_adherence

    fill <-  
            Record.ID                  Label.Name        Generic.Medication.Name Strength Quantity Days.Supplied Date.of.Fill   GCN GC3         NDC category
        4      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    30000            30   2014-06-18 19154 M4D 00310075290  statins
        5      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    90000            90   2014-06-25 19154 M4D 00310075290  statins
        6      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    90000            90   2014-09-30 19154 M4D 00310075290  statins
        7      aaaaa            CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG    90000            90   2014-12-18 19154 M4D 00310075290  statins
        8      aaaaa            CRESTOR TAB 10 MG ROSUVASTATIN CALCIUM TAB 10 MG    10 MG    90000            90   2014-12-18 19153 M4D 00310075190  statins

函数返回我

 Record.ID            Label.Name        Generic.Medication.Name Strength Category First_fill  Last_fill Duration DaysCovered Year Method Adherence
    aaaaa         CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG  statins 2014-06-18 2014-12-18 197 days         197 2014    PDC         1

我的问题是,现在我想首先按 Record.ID 和类别对药物数据集进行分组,然后将 calc_adherence 应用到每个小组,这样我就可以获得每位患者和他们服用的每种药物的结果。 我试试

ddply(category.medication, c('Record.ID','category'), summarize, function(x) calc_adherence(x, year)),

但这不起作用.. 我想要的最终数据集是

 Record.ID               Label.Name        Generic.Medication.Name Strength Category First_fill  Last_fill Duration DaysCovered Year Method Adherence
    aaaaa         CRESTOR TAB 20 MG ROSUVASTATIN CALCIUM TAB 20 MG    20 MG  statins 2014-06-18 2014-12-18 197 days         197 2014    PDC         1
    aaaaa          ...                                                       RASA    ...                                                PDC         0.8                               
    bbbbb          ...                                                       RASA    ...                                                PDC         0.75    

【问题讨论】:

  • 抱歉,年份是'2014'
  • 所以,list1 &lt;- split(df, df$Record.ID) 然后rbindlist(lapply(list1, function(x))?
  • 能否也提供calc_adherence &lt;- function(fill, year)的功能?

标签: r function grouping plyr


【解决方案1】:

试试

aggreagate

例如,如果您的数据名为“数据”

 aggregate(data, by = list(data$Record.ID), calc_adherence)

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2019-06-26
    • 2020-06-12
    • 2016-01-09
    • 2022-01-17
    • 2021-04-25
    相关资源
    最近更新 更多