R - 如何制作冲积图

R - How to make a Alluvial diagram

我想使用 library(alluvial)

制作冲积图

我的数据框如下所示:

  > id   Diagnose 1      Diagnose 2     Diagnose 3   
    1    Cancer          cancer           cancer            
    2    Headache        Breastcancer     Breastcancer             
    3    Breastcancer    Breastcancer     cancer   
    4    Cancer          cancer           cancer            
    5    Cancer          Breastcancer     Breastcancer             
    6    Cancer          Breastcancer     cancer            

数据框显示了医生给出的诊断名称(只是示例,不是真正的诊断)。

因此对于患者 id 1,第一个诊断是癌症,第二个也是癌症,最后一个也是癌症。对于 2 号患者,第一个诊断是头痛,然后患者被诊断为乳腺癌,依此类推。

我想制作一张冲积图,显示每位患者的诊断进展。并收集首次诊断为 "cancer" 的所有患者,依此类推。 我怎样才能制作一个冲积图,看起来像这样: [![在此处输入图片描述][1]][1]

您应该首先处理您的数据,然后使用 alluvial 函数:

library(dplyr)                                          # to manipulate data
library(alluvial)
allu <- data %>% 
        group_by(Diagnose1, Diagnose2, Diagnose3) %>%   # grouping
        summarise(Freq = n())                           # adding frequencies

# here the plot
alluvial(allu[,1:3], freq=allu$Freq)


有数据(我删除了列名中的 space):

data <- read.table(text = "id   Diagnose1      Diagnose2     Diagnose3        
    1    Cancer          cancer           cancer            
    2    Headache        Breastcancer     Breastcancer             
    3    Breastcancer    Breastcancer     cancer   
    4    Cancer          cancer           cancer            
    5    Cancer          Breastcancer     Breastcancer             
    6    Cancer          Breastcancer     cancer      ",header = T)

编辑

如果你有NA,可以尝试这样替换:

# first, you should use the option stringsAsFactor = F in the data, in my case
data <- read.table(text = "id   Diagnose1      Diagnose2     Diagnose3        
    1    Cancer          cancer           cancer            
                   2    Headache        Breastcancer     Breastcancer             
                   3    Breastcancer    Breastcancer     cancer   
                   4    Cancer          NA           cancer            
                   5    Cancer          Breastcancer     Breastcancer             
                   6    Cancer          Breastcancer     cancer      ",header = T, stringsAsFactor = F )

# second, replace them with something you like:
data[is.na(data)] <- 'nothing'

最后,你可以绘制绘图,它会出现 choosen 替换 NAs 的词。