【发布时间】:2016-05-04 18:02:29
【问题描述】:
我有带有维恩图值的表格,我试图将其读入 R 并解析,以便使用 VennDiagram 包进行绘图。我的表格如下所示:
H3K27AC.bed H3K4ME3.bed gencode.bed Total Name
X 19184 gencode.bed
X 6843 H3K4ME3.bed
X X 3942 H3K4ME3.bed|gencode.bed
X 5097 H3K27AC.bed
X X 1262 H3K27AC.bed|gencode.bed
X X 4208 H3K27AC.bed|H3K4ME3.bed
X X X 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed
我可以像这样以数据框的形式读取表格:
> venn_table_df<-read.table(venn_table_file,header = TRUE,sep = "\t",stringsAsFactors = FALSE)
> venn_table_df
H3K27AC.bed H3K4ME3.bed gencode.bed Total Name
1 X 19184 gencode.bed
2 X 6843 H3K4ME3.bed
3 X X 3942 H3K4ME3.bed|gencode.bed
4 X 5097 H3K27AC.bed
5 X X 1262 H3K27AC.bed|gencode.bed
6 X X 4208 H3K27AC.bed|H3K4ME3.bed
7 X X X 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed
我可以像这样从表格中获取维恩图的类别
> venn_categories<-colnames(venn_table_df)[!colnames(venn_table_df) %in% c("Total","Name")]
> venn_categories
[1] "H3K27AC.bed" "H3K4ME3.bed" "gencode.bed"
我什至可以制作一个更易于阅读的汇总表,如下所示:
> venn_summary<-venn_table_df[!colnames(venn_table_df) %in% venn_categories]
> venn_summary
Total Name
1 19184 gencode.bed
2 6843 H3K4ME3.bed
3 3942 H3K4ME3.bed|gencode.bed
4 5097 H3K27AC.bed
5 1262 H3K27AC.bed|gencode.bed
6 4208 H3K27AC.bed|H3K4ME3.bed
7 9222 H3K27AC.bed|H3K4ME3.bed|gencode.bed
但困扰我的是如何从表格中取出值并将它们正确分配给维恩图的区域。作为参考,三重维恩函数如下所示:
n1<-5097
n2<-6843
n3<-19184
n12<-4208
n13<-1262
n23<-3942
n123<-9222
venn <-draw.triple.venn(area1=n1+n12+n13+n123,
area2=n2+n23+n12+n123,
area3=n3+n23+n13+n123,
n12=n12+n123,
n13=n13+n123,
n23=n23+n123,
n123=n123,
category=venn_categories,
fill=c('red','blue','green'),
alpha=c(rep(0.3,3)))
但显然这需要手动设置值,这是不可取的,因为我有很多这样的数据集,并且还需要将其扩展到 4 路和 5 路维恩。如何让 R 找到维恩中每个字段的正确值?我尝试了多种不同的方法,使用grep、grepl,并为与绘图的每个区域的类别匹配的行设置数据框子集,但这并没有正常工作。有什么建议么?顺便说一句,此数据是从 HOMER 软件包的 mergePeaks 程序输出的。
【问题讨论】:
-
您的问题是关于如何计算 n1、n2 等数字吗?扩展到 4 或 5 组是一个不同的问题。你能澄清一下吗?
-
数字已经计算好了。问题是将表格中的数字放到图中的正确位置。但我想我想通了,不得不使用正则表达式搜索,给我一分钟,我会发布它。
标签: r venn-diagram