我有 4 列,指定每次试验中是否满足特定指标。
mydata <- data.frame(trial = c(1,2,3,4,5,6,7,...), # eg. up to 27 000
metricA = c('success', 'failed', 'failed', 'success',...),
metricB = c('failed', 'success', 'success', 'success',...),
metricC = c('failed', 'failed', 'success', 'failed',...),
metricD = c('success', 'success', 'failed', 'success',...),
)
指标列与试验列一样长,因此对于每次试验,都知道每个指标是失败还是成功。
现在我想可视化每个指标以及跨指标有多少次试验成功或失败。 IE。在度量 a 中成功的试验中有 10% 在度量 c 中失败,依此类推。我想用维恩图将其可视化。这是我生成的代码:
mydata <- read.csv("trials-metrics.csv")
mA<-mydata$metricA
mB<-mydata$metricB
mC<-mydata$metricC
mD<-mydata$metricD
x <- list(
A = mA,
B = mB,
C = mC,
D = mD
)
ggVennDiagram(x, category.names = c("A","B","C","D"))
这会产生以下情节。
最有可能的是,这种类型的维恩图仅比较组之间的共享值。因此,我假设我需要为每个指标结果组合生成一个唯一的值。我怎样才能实现这个?还是我还漏掉了其他东西?
我发现了这个类似的条目,其中使用相同的“真/假”类型的二聚体数据成功生成了相同的维恩图。
我对 R 非常陌生,所以最简洁的代码解决方案将不胜感激。
正如您已经猜到的那样,当我们处理集合时,我们必须使元素唯一,例如您可以将
trial
列粘贴到每个指标列。
使用一些随机示例数据:
n <- 1000
set.seed(123)
mydata <- data.frame(
trial = seq_len(n), # eg. up to 27 000
metricA = sample(c("success", "failed"), n, replace = TRUE),
metricB = sample(c("success", "failed"), n, replace = TRUE),
metricC = sample(c("success", "failed"), n, replace = TRUE),
metricD = sample(c("success", "failed"), n, replace = TRUE)
)
library(ggVennDiagram)
x <- list(
A = paste0(mydata$metricA, mydata$trial),
B = paste0(mydata$metricB, mydata$trial),
C = paste0(mydata$metricC, mydata$trial),
D = paste0(mydata$metricD, mydata$trial)
)
ggVennDiagram(x)
或者您可以考虑使用
lapply
:,而不是手动创建列表
xx <- lapply(mydata[-1], \(x) paste(x, mydata$trial))
ggVennDiagram(xx, category.names = LETTERS[seq_along(xx)])