(#我更新了我的问题,顺便提一下@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
非常感谢您提供帮助!
尝试使用表函数。这是一个事先探索数据的简单命令。 https://www.r-bloggers.com/r-function-of-the-day-table/
(显示头(数据)本来会更有帮助)
你可能想尝试一下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")
以获取详细信息和示例。