2016-06-28 1 views
3

У меня есть несколько списков с именами генов, как это:R: попарно экстракция общих элементов между множественным характером списками

List1:

XLOC_012482 
XLOC_019357 
XLOC_014642 
XLOC_010021 
XLOC_013282 

List2:

XLOC_012482 
XLOC_019357 
XLOC_004860 
XLOC_004022 
XLOC_002278 

List3:

XLOC_004860 
XLOC_004022 
XLOC_006292 
XLOC_006616 
XLOC_013802 

И Я хочу извлечь общие элементы между всеми парами списков. Я пробовал использовать intersect, но я не мог использовать его для символов, и я также не знаю, как это сделать для всех парных комбинаций.

+0

'intersect' работает на персонажей для меня. Возможно, вы работаете с переменными факторов. – lmo

+2

Вышеупомянутые не выглядят как несколько списков. Кажется, у вас несколько векторов «символов». Если все эти векторы хранятся в объекте 'list', вы можете попробовать' combn (mylist, 2, FUN = function (x) do.call (intersect, x), simplify = FALSE) ' – nicola

ответ

4

Вы может поставить свои списки в один список li, а затем использовать combn в списке с intersect в качестве параметра функции:

combn(li, 2, function(x) intersect(x[[1]], x[[2]]), simplify = F) 
# [[1]] 
# [1] "XLOC_012482" "XLOC_019357" 
# 
# [[2]] 
# character(0) 
# 
# [[3]] 
# [1] "XLOC_004860" "XLOC_004022" 

данных:

li <- list(c("XLOC_012482", "XLOC_019357", "XLOC_014642", "XLOC_010021", 
"XLOC_013282"), c("XLOC_012482", "XLOC_019357", "XLOC_004860", 
"XLOC_004022", "XLOC_002278"), c("XLOC_004860", "XLOC_004022", 
"XLOC_006292", "XLOC_006616", "XLOC_013802")) 
+1

Вот что я предложил в Комментарии. +1. – nicola

+0

Я объединил свои полные списки в 'mylist' и получил следующую ошибку:' Ошибка в combn (mylist, 2, function (x) intersect (x [[1]], x [[2]]), simplify = F) : n Jon

+0

Можете ли вы 'dput' ваши данные? т. е. вставить результат 'dput (mylist)'? – Psidom

0

Это также полезно с помощью table (я использую тот же li список как @ Psidom отвечает):

tb <- table(unlist(li)) 

даст вам каждую последовательность вместе с ее подсчетом среди всех списков:

# XLOC_002278 XLOC_004022 XLOC_004860 XLOC_006292 XLOC_006616 XLOC_010021 XLOC_012482 
#  1   2   2   1   1   1   2 
# XLOC_013282 XLOC_013802 XLOC_014642 XLOC_019357 
#   1   1   1   2 

Если вы хотите извлечь эти дубликаты:

tb[tb>1] 

# XLOC_004022 XLOC_004860 XLOC_012482 XLOC_019357 
#   2   2   2   2 
Смежные вопросы