从桑基图中去除 NA (flipPlots Sankeydiagram)

Removing NA from Sankey Diagram (flipPlots Sankeydiagram)

我目前正在努力制作一张可视化晚期乳腺癌女性抗癌治疗流程的桑基图。

我为每一行治疗(beh1、beh2 等)命名给定治疗(6 个选项或“其他”)。

然而,一些患者没有接受我的 df 目前包含的所有 6 线治疗,因此在几列中被给予 N/A。

一个例子

sankey <- data.frame(ID = c("1","2","3","4","5"),
                 Beh1 = c("TDM1","Capecitabine", "Capecitabine", "Eribulin", "TDM1"),
                 Beh2 = c("Capecitabine", "NA", "Taxane", "Eksperimentiel", "Taxane"),
                 Beh3 = c("Eribulin", "NA", "Eribulin", "Eribulin", "Eribulin"))

还有图表

    SankeyDiagram(sankey[-1],
          link.color = "Source",
          variables.share.values = TRUE,)

我希望它显示的内容:

如有任何帮助,我们将不胜感激

亲切的问候

这是你想要的吗?

library(tidyverse)
# require(devtools)
# install_github("Displayr/flipPlots")

sankey <- data.frame(ID = c("1","2","3","4","5"),
                     Beh1 = c("TDM1","Capecitabine", "Capecitabine", "Eribulin", "TDM1"),
                     Beh2 = c("Capecitabine", "NA", "Taxane", "Eksperimentiel", "Taxane"),
                     Beh3 = c("Eribulin", "NA", "Eribulin", "Eribulin", "Eribulin"))

sankey %>%
  dplyr::na_if("NA") %>% 
  tidyr::drop_na() %>%
  dplyr::select(-1) %>% 
  SankeyDiagram(link.color = "Source",
              variables.share.values = TRUE)

首先,我会转换您的 data.frame,以便它包含因子而不是字符列和实际 NA 值而不是字符 "NA"s。

sankey <- data.frame(ID = c("1","2","3","4","5"),
                     Beh1 = c("TDM1","Capecitabine", "Capecitabine", "Eribulin", "TDM1"),
                     Beh2 = c("Capecitabine", NA, "Taxane", "Eksperimentiel", "Taxane"),
                     Beh3 = c("Eribulin", NA, "Eribulin", "Eribulin", "Eribulin"), 
                     stringsAsFactors = TRUE)

如果您使用 output.data.only = TRUE 调用 SankeyDiagram,您将获得函数用于生成图表的节点和 link。然后,您可以编辑 links 以排除涉及 NA 的 link,并使用修改后的 links 调用 SankeyDiagram。将 sinks.right = FALSE 添加到 SankeyDiagram 调用可确保“Beh1:Capecitabine”的第二个 link 不会延伸到绘图的右边缘。

links.and.nodes <- SankeyDiagram(sankey[-1], link.color = "Source", output.data.only = TRUE, 
                                 variables.share.values = TRUE, sinks.right = FALSE)
links.and.nodes$links <- od$links[!is.na(od$links$group), ]
SankeyDiagram(links.and.nodes = links.and.nodes, link.color = "Source", 
              variables.share.values = TRUE, sinks.right = FALSE)

SankeyDiagram output