我已经在论坛上阅读过,但是没有找到想要的答案。
我有以下数据集:
重要的列是TGEClass和多肽:
我想计算不同的TGE类之间的重叠
我使用了来自VennDiagram的calculate.overlap(TGE),但这并没有给我想要的结果;
带有伪数据集的R代码:
# A simple single-set diagram
C1 <- as.data.frame(letters[1:10])
C2 <- as.data.frame(letters[1:10])
data =cbind(C1,C2)
overlap <- calculate.overlap(data)
overlap = as.data.frame(overlap)
R结果: 结果:
a1 a2 a3
1 a a a
2 b b b
3 c c c
4 d d d
5 e e e
6 f f f
所需的结果将如下所示:
TGEClass
两个TGE类均表达10个基因
只有50个基因
仅短短60个基因
它基本上是一个ven图,但以表格格式。
请注意,每个基因都有不同数量的TGE类类别。
我是R的新手,所以将不胜感激。
非常感谢
Ishack
答案 0 :(得分:0)
VennDiagram::calculate.overlap()
的输出不太方便以后使用(在这里使用as.data.frame时,由于两个向量的大小相同,您很幸运。)
您实际上可以使用tidyverse
自己进行计算,然后返回摘要:
library(tidyverse)
list(
"Cardiome" = letters[1:10],
"SuperSet" = letters[8:24]
) %>%
map2_dfr(., names(.), ~tibble::enframe(.x) %>% mutate(group=.y)) %>%
add_count(value) %>%
group_by(value) %>%
summarise(group2 = ifelse(n()==2, "both", group)) %>%
count(group2)
#> # A tibble: 3 x 2
#> group2 n
#> <chr> <int>
#> 1 both 3
#> 2 Cardiome 7
#> 3 SuperSet 14
如果您想坚持使用VennDiagram::calculate.overlap()
的输出,可以使用类似以下的内容:
library(tidyverse)
overlap <- VennDiagram::calculate.overlap(
x = list(
"Cardiome" = letters[1:10],
"SuperSet" = letters[8:24]
)
);
map2_dfr(overlap, names(overlap), ~tibble::enframe(.x) %>% mutate(group=.y)) %>%
spread(group, group) %>%
mutate(a1_only = !is.na(a1) & is.na(a2),
a2_only = !is.na(a2) & is.na(a1),
both = !is.na(a2) & !is.na(a1)) %>%
summarise_at(c("a1_only", "a2_only", "both"), sum) %>%
gather(group, number, everything())
#> # A tibble: 3 x 2
#> group number
#> <chr> <int>
#> 1 a1_only 10
#> 2 a2_only 17
#> 3 both 0