我正在处理患者数据,我有大约 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)
如果要求包含所有变量,那么一种可能的方法可能是将它们作为排序(长)交集表进行检查,也许用 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