(#我已经更新了我的问题,顺便提一下@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"))
然而,
我仍然不高兴,因为它很挑剔。这只是一个小型的数据框示例,但如果我们拥有一个包含数百个条件的庞大数据框而不仅仅是&#34; a&#34;,&#34; b&#34;和&#34; c&#34; ?我无法逐个输入&#34; nrow(子集(化验,c == 1))...&#34;。
有没有人知道按照我的意愿汇总数据的最佳方法,并直接将输出作为表或数据框?什么东西自动化或最好的命令?与VennDiagram相同的问题,如果我们有超过3组手动输入#34; draw.triple.venn(area1 = 112,...)中的每个组的所有共同数字,我觉得非常挑剔34。
我附上了我的(小)数据框示例的.txt文件: https://www.dropbox.com/s/kj9hdze83xeltlz/test.txt?dl=0
如果你能提供帮助,请提前多多谢谢!
答案 0 :(得分:1)
尝试使用表格功能。这是一个事先探索数据的简单命令。 https://www.r-bloggers.com/r-function-of-the-day-table/
(显示头部(数据)可能会更有帮助)
答案 1 :(得分: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)
你应该在情节窗口中得到这个数字:
现在abcVenn
包含有关十字路口的信息。因此,您可以询问每个区域中包含哪些元素。例如,
getVennRegion(abcVenn, c("a", "c"))
[1] "dukthw53" "jkhsgf28"
getVennRegion(abcVenn, c("a", "b", "c"))
[1] "jkhsgf4" "jkhsgf44" "dukthw51"
如果您安装软件包(它位于CRAN中),您可以输入vignette("nVennR")
以获取详细信息和示例。