总结数据 - 维恩图 - 变量之间的共同值

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

(#我更新了我的问题,顺便提一下@Sammy ;-))

我想用VennDiagram包绘制维恩图。事先,我需要正确总结我的数据,但我找不到很好的命令,以自动的方式轻松达到我的目标。

我的数据框如下:

str(a)

'data.frame':   401 obs. of  3 variables:
 $ quant    : int  77 55 66 55 44 11 22 33 66 588 ...
 $ condition: Factor w/ 3 levels "a","b","c": 1 1 1 1 1 1 1 1 1 1 ...
 $ name     : Factor w/ 389 levels "dukthw1","dukthw10",..: 126 150 160 171     182 193 203 213 224 127 ...

> head(a)
  quant condition       name
1    77         a    jkhsgf1
2    55         a    jkhsgf2
3    66         a    jkhsgf3
4    55         a    jkhsgf4
5    44         a    jkhsgf5
6    11         a kluhswrg10

我想要 :

1 /因子之间有多少“名称”是共同的,例如:

a和b = 10

a和c = 8

b和c = 8

a,b和c = 3

2 /哪些名称与1 /的先前统计数据相同。

这是允许我获取信息并实现图表的原因:

library(VennDiagram)
a<- read.delim("test2.txt")

aaa<-table(a$condition, a$name)
ta<-t(aaa)
assay<-as.data.frame.matrix(ta)

str(assay)
head(assay)

nrow(subset(assay, a == 1))
nrow(subset(assay, b == 1))
nrow(subset(assay, c == 1))

nrow(subset(assay, a == 1 & b == 1))
nrow(subset(assay, b == 1 & c == 1))
nrow(subset(assay, a == 1 & c == 1))

nrow(subset(assay, a == 1 & b == 1 & c == 1))


draw.triple.venn(area1 = 112, area2 = 160, area3 = 129, n12 = 10, n23 = 7, n13 = 6, 
             n123 = 4, category = c("a", "b", "c"), lty = "blank", 
             fill = c("skyblue", "pink1", "mediumorchid"))

然而,

我仍然不高兴,因为它很挑剔。这只是一个小型数据框示例,但如果我们有一个包含数百个条件的庞大数据帧而不仅仅是“a”,“b”和“c”呢?我无法逐个输入“nrow(子集(化验,c == 1))......”。

有谁知道我想要的总结我的数据的最佳方法,并将输出直接作为表或数据框?什么东西自动化或最好的命令?与VennDiagram相同的问题,如果我们有超过3组手动输入“draw.triple.venn(area1 = 112,...)”中每组的所有共同数字,我觉得非常挑剔。

我附上了我的(小)数据框示例的.txt文件:https://www.dropbox.com/s/kj9hdze83xeltlz/test.txt?dl=0

非常感谢您提供帮助!

r dataframe venn-diagram summarize
2个回答
1
投票

尝试使用表函数。这是一个事先探索数据的简单命令。 https://www.r-bloggers.com/r-function-of-the-day-table/

(显示头(数据)本来会更有帮助)


1
投票

你可能想尝试一下nVennR。我为这种情况开发了这个包。以下是在您的示例中实现您想要的(我相信)的一种方法:

library(nVennR)
tmp <- read.table(path_to_test_data)
toV.a <- subset(tmp, V2 == "a")$V3
toV.b <- subset(tmp, V2 == "b")$V3
toV.c <- subset(tmp, V2 == "c")$V3
abcVenn <- plotVenn(list(a=toV.a, b=toV.b, c=toV.c), setColors=c("skyblue", "pink1", "mediumorchid"), borderWidth = 0)

你应该在绘图窗口中得到这个数字:

Venn Diagram

现在abcVenn包含有关交叉口的信息。因此,您可以询问每个区域中包含哪些元素。例如,

getVennRegion(abcVenn, c("a", "c"))
[1] "dukthw53" "jkhsgf28"

getVennRegion(abcVenn, c("a", "b", "c"))
[1] "jkhsgf4"  "jkhsgf44" "dukthw51"

如果您安装了软件包(它在CRAN中),您可以输入vignette("nVennR")以获取详细信息和示例。

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