【问题标题】:Plotting data by a matched third string/factor in R在 R 中通过匹配的第三个字符串/因子绘制数据
【发布时间】:2016-07-27 11:08:44
【问题描述】:

我在 R 中有一个数据框,由 LOS、AGE 和多个更广泛的条件组成

LOS    AGE     broader.condition
  1     75                Spinal
  2     68               Urology
  1     88              Thoracic
  8     76                Spinal
  5     70               Billary
 ...   ...                   ...

我想为每个更广泛的条件绘制 AGE 与 LOS,即 AGE 与 LOS,在 r 中具有匹配的第三列条件。这可以由名称指定(即,如果需要,专门查看某个更广泛的条件)或自动运行整个数据集并自动为每个更广泛的条件绘图

任何建议将不胜感激,谢谢!

以下可重现的相似数据集

data <- structure(list(LOS = c(1, 2, 1, 8, 5, 1, 1, 1, 3, 1, 1, 1), ADMISSION_AGE_YEARS = c(75, 68, 88, 76, 70, 28, 47, 57, 74, 68, 51, 67), broader.condition = structure(c(47L, 56L, 51L, 47L, 51L, 6L, 3L, 11L, 51L, 3L, 11L, 6L), .Label = c("Acute Liver Failure", "Aortic Disease", "Arthritis and Lim Deformity/Fractures", "Asphyxiation", "Billary", "Bowel Infection/Perforation/Infarction", "Breast Cancer", "Cancer (Unoperated)", "Cardiac Arrest", "Cardiac Arythmia", "Cerebral Aneurysm (Non-Ruptured)", "Cerebral Infarction", "Cerebral Oedema", "Chronic Liver Disease", "COPD/Asthma/Respiratory Failure", "Drug Overdose and Poisoning", "Ear/Nose/Throat", "Electrolyte", "Encephalitis", "Endocrine", "Epilepsy", "Gastroectomy", "Gynaecological Cancer/Surgery", "Heart Failure", "Hydrocephalus", "Hyperventilation Syndromes", "Infection incl. unspecified", "Influenza", "Interstitial Pulmonary Disease", "Large Bowel Cancer", "Max Fax Surgeries", "Meningitis", "Myocardial Infarction", "Neuro-Surgical Cancer", "Obesity", "Other Inter-Cerebral Haemmorhage", "Pancreatitis", "Perforation of Oesophagus", "Peripheral Vascular Disease (Inlc. Ischaemia and Infarction", "Pleural Effusion", "Pneumonia", "Psychiatric", "Pulmonary/Veno-Thrombo Embollism", "Skin Inflammation/Infection", "Skull and Facial Fractures", "Spinal Chord Weakness", "Spinal Surgery/Fractures", "Spinal Trauma", "Sub-Arachnoid Haemmorhage", "Systemic Weakness", "Thoracic/Abdominal Aortic Aneurysm (Non-Ruptured)", "Thoracic/Abdominal Aortic Aneurysm (Ruptured incl. injury)", "Trauma to Intra-Abdominal Organs/Vessels", "Trauma to Thoracic Cage", "Traumatic Inter-Cerebral Haemmorhage/Contusions/Oedema", "Urology/Renal Surgery" ), class = "factor")), .Names = c("LOS", "ADMISSION_AGE_YEARS", "broader.condition"), row.names = c(4L, 5L, 14L, 16L, 17L, 18L, 19L, 31L, 33L, 38L, 39L, 40L), class = "data.frame")

`

【问题讨论】:

    标签: r plot dataframe


    【解决方案1】:

    如果我正确理解您的问题,我认为使用 dplyr 包中的 filter 是一个不错的选择。

    确定第三列的唯一值:

    levs <- unique(data$broader.condition)
    

    过滤特定条件的数据并绘制:

      require(dplyr)
      fdata <- filter(data, broader.condition == levs[1])
      plot(fdata$LOS, fdata$ADMISSION_AGE_YEARS, 
           pch=19, xlab= 'LOS', ylab= 'AGE', main= paste0(levs[1]))
    

    或者通过一个循环在单独的图中绘制所有条件:

    for (i in 1:length(levs))
    {
      temp <- filter(data, broader.condition == levs[i])
      plot(temp$LOS, temp$ADMISSION_AGE_YEARS, 
           pch=19, xlab= 'LOS', ylab= 'AGE', main= paste0(levs[i]))
    }
    

    或者,您可以轻松地使用ggplot2 在同一个图上用不同的颜色绘制所有条件。

    【讨论】:

    • 可能需要按特定条件过滤,所以这很好。谢谢!
    【解决方案2】:

    首先,这是否类似于您对更通用选项的追求? 使用库(ggplot2)

    ggplot(data, aes(x = ADMISSION_AGE_YEARS, y = LOS)) +
      geom_point() +
      facet_grid(. ~ broader.condition) + 
      theme_bw()
    

    ggplot(data, aes(x = ADMISSION_AGE_YEARS, y = LOS, colour = broader.condition)) +
      geom_point() +
      theme_bw()
    

    【讨论】:

    • 这两种方法都非常有用,尤其是第二种方法可以隔离那些逗留时间很长的病例。谢谢你。
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多