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

时间:2018-05-03 14:30:20

标签: r dataframe venn-diagram summarize

(#我已经更新了我的问题,顺便提一下@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

如果你能提供帮助,请提前多多谢谢!

2 个答案:

答案 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)

你应该在情节窗口中得到这个数字:

Venn Diagram

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

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

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

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