обобщающие данные - диаграмма Венна - общие значения среди переменных - PullRequest
0 голосов
/ 03 мая 2018

(# Я обновил свой вопрос, кстати, благодаря @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 / сколько «имен» являются общими для факторов, например:

а и б = 10

а и с = 8

b и c = 8

а, б и в = 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 (subset (assay, c == 1)) ...".

Кто-нибудь знает лучший способ суммировать мои данные так, как я хочу, и получать результаты непосредственно в виде таблицы или фрейма данных? Что-то автоматизировано или лучшая команда? Те же проблемы с VennDiagram, я нахожу очень привередливым, если у нас есть более 3 групп, чтобы вручную ввести все общие числа для каждой группы в "draw.triple.venn (area1 = 112, ...)".

Я приложил .txt файл моего (маленького) примера с фреймом данных: https://www.dropbox.com/s/kj9hdze83xeltlz/test.txt?dl=0

Большое спасибо заранее, если вы можете помочь!

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Вы можете попробовать 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") для подробностей и примеров.

0 голосов
/ 03 мая 2018

Попробуйте использовать табличную функцию. Это простая команда для изучения ваших данных заранее. https://www.r -bloggers.com / г-функция-оф-дневного стола /

(отображение головы (данных) было бы немного более полезным)

...