【问题标题】:R: Calculating mean from a different column, keeping duplicate values [duplicate]R:从不同的列计算平均值,保留重复值[重复]
【发布时间】:2020-04-06 06:30:49
【问题描述】:

使用我的数据集中的这段代码,我能够为每个 PatientId 分离出每个特定的 ICD10Code:

data.code<-data.1 %>% group_by(ICD10Code,PatientId) %>%
  summarise(ReferralSource=first(ReferralSource),
    NextAppt=first(NextAppt), Age=max(Age),
    InsuranceName=toString(unique(InsuranceName)))

ICD10Code PatientId ReferralSource   NextAppt   Age InsuranceName      
 <fct>     <fct>     <fct>            <fct>    <int> <chr>              
 1 ""        397       Piedmont Hospit… N           51 SLIDING FEE SCHEDU…
 2 ""        1770      St Francis       N           42 SLIDING FEE SCHEDU…
 3 ""        9787      St Francis       Y           55 *SELF PAY*, SLIDIN…
 4 ""        18872     Piedmont Hospit… Y           50 SLIDING FEE SCHEDU…
 5 ""        20172     St Francis       Y           55 Medicaid-GA (Medic…
 6 A084      1856      Piedmont Hospit… N           35 *SELF PAY*, SLIDIN…
 7 A609      10937     Piedmont Hospit… Y           31 SLIDING FEE SCHEDU…
 8 A749      18705     St Francis       N           38 SLIDING FEE SCHEDU…
 9 B001      19100     St Francis       N           37 SLIDING FEE SCHEDU…
10 B079      19076     St Francis       N           47 Medicaid-GA (Medic…
11 B182      9690      St Francis       N           49 *SELF PAY*, SLIDIN…
12 B20       18990     St Francis       N           53 Medicaid-GA (Medic…
13 B349      20235     Piedmont Hospit… N           35 SLIDING FEE SCHEDU…
14 B351      4781      St Francis       N           36 BCBS-GA            
15 B351      7466      St Francis       Y           47 SLIDING FEE SCHEDU…
16 B351      18820     Piedmont Hospit… Y           25 BCBS-GA            
17 B353      18990     St Francis       N           53 Medicaid-GA (Medic…
18 B370      397       Piedmont Hospit… N           51 SLIDING FEE SCHEDU…
19 B370      19112     St Francis       Y            0 *SELF PAY*, CareSo…
20 B370      20291     St Francis       Y            0 BCBS-GA (POS), SLI…

我现在需要做的,但不知道如何,是循环遍历ICD10Code 列,并从Age 列计算每个唯一 ICD10 代码的平均年龄,同时保留重复项。

例如从上面的数据来看,ICD10CodeB351 出现了 3 次,每个 B351 对应的年龄是 36、47、25。我想从该值的年龄计算平均值。我认为我需要一个 for 循环,并且需要创建一个由 Code 和平均年龄组成的新数据框。我该怎么做呢?

【问题讨论】:

  • 该问题是每个现有问题的副本,用于查找 groupby-summarize/mutate。 您的困惑仅仅是关于 summarise 与 mutate 之间的区别。 (当您说“我不需要删除任何重复项”时,您的意思是说“必须保留重复项”
  • 重复:有401 existing questions on [r] summarize mutate is:question。其中一些解释了 mutate 与 summarise 之间的区别。
  • 感谢您花时间提供编辑和解释。很抱歉造成混乱。

标签: r dplyr summarize


【解决方案1】:

使用 dplyr,您可能希望在 ICD10Code 上进行分组并添加代表平均年龄的列:

data.code <- data.code %>% group_by(ICD10Code) %>% mutate(average_age = mean(Age))

这样您就不会丢失任何行,因为“我不需要删除任何重复项”部分以及列包含相同 ICD10Code 的不同值的事实,我假设您想要这些行。如果您选择汇总(这是另一个选项),您将删除 ICD10Code 重复项。

【讨论】:

    【解决方案2】:

    试试:

    library(tidyverse)
    dt %>% group_by(ICD10code) %>% summarise(mAge = mean(Age, na.rm = T))
    

    如果你想将它附加到你的其他代码:

    data.1 %>% group_by(ICD10Code,PatientId) %>% 
    summarise(ReferralSource=first(ReferralSource),NextAppt=first(NextAppt),Age=max(Age),
    InsuranceName=toString(unique(InsuranceName))) %>% ungroup() %>% group_by(ICD10code) %>% mutate(mAge = mean(Age, na.rm = T))
    

    【讨论】:

    • 这不会删除重复的 ICD10 代码吗?正如问题指定不要删除它们。
    • 是的,过失。我确实将其更新为mutate,而不是summarise
    猜你喜欢
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    相关资源
    最近更新 更多