UpsetR 图的替代方案或可视化 R 中许多变量的交集

问题描述 投票:0回答:1

我正在处理患者数据,我有大约 77 个不同药物的变量,这些变量显示患者是否正在服用该药物。我想直观地看看患者使用不同药物的交叉点会是什么样子。我使用了 UpdurR,但从视觉上看,它可以完美地处理最多 16 个变量。如果我包含所有变量,那么图表看起来非常混乱,并且无法从图表中读取和理解任何内容。除了 UpsetR 之外,还有其他方法可以可视化此类相交数据吗?以下是我的数据示例。

my_dataframe <- as.data.frame(matrix(sample(c(0, 1), 637599 * 77, replace = TRUE), ncol = 77))
colnames(my_dataframe) <- paste0("Ind_", 1:77)

library(UpSetR)
upset(my_dataframe, nsets = 77)

以下是两张图的示例和差异。

ggplot2 rstudio visualization upsetr
1个回答
0
投票

如果要求包含所有变量,那么一种可能的方法可能是将它们作为排序(长)交集表进行检查,也许用 gt 包打印。

library(tidyverse)

my_dataframe <- as.data.frame(matrix(sample(c(0, 1), 1024 * 10, replace = TRUE), ncol = 10))
colnames(my_dataframe) <- paste0("Ind_", 1:10)
  
my_dataframe |> 
  mutate(row = row_number()) |> 
  pivot_longer(-row) |> 
  mutate(value = if_else(value == 1, name, NA)) |> 
  pivot_wider(names_from = name, values_from = value) |> 
  unite(col = intersect, -row, sep = " | ", na.rm = TRUE) |>
  count(intersect, sort = TRUE)
#> # A tibble: 644 × 2
#>    intersect                                                  n
#>    <chr>                                                  <int>
#>  1 Ind_3 | Ind_4 | Ind_7 | Ind_10                             7
#>  2 Ind_1 | Ind_2 | Ind_4 | Ind_6 | Ind_7 | Ind_10             6
#>  3 Ind_3 | Ind_4 | Ind_5 | Ind_6 | Ind_8 | Ind_9 | Ind_10     5
#>  4 Ind_1 | Ind_2 | Ind_3 | Ind_4 | Ind_5 | Ind_7 | Ind_9      4
#>  5 Ind_1 | Ind_2 | Ind_3 | Ind_4 | Ind_8 | Ind_10             4
#>  6 Ind_1 | Ind_2 | Ind_3 | Ind_5 | Ind_8 | Ind_9              4
#>  7 Ind_1 | Ind_2 | Ind_7 | Ind_9 | Ind_10                     4
#>  8 Ind_1 | Ind_3 | Ind_4 | Ind_5 | Ind_7 | Ind_8 | Ind_10     4
#>  9 Ind_1 | Ind_3 | Ind_5 | Ind_6 | Ind_7 | Ind_8 | Ind_9      4
#> 10 Ind_1 | Ind_3 | Ind_6 | Ind_7 | Ind_9                      4
#> # ℹ 634 more rows

创建于 2024-03-13,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.