R:在多个字符列表之间成对提取公共元素

时间:2016-06-28 20:50:49

标签: r

我有几个基因名称列表如下:

的List1:

XLOC_012482 
XLOC_019357 
XLOC_014642 
XLOC_010021 
XLOC_013282 

列表2:

XLOC_012482 
XLOC_019357 
XLOC_004860 
XLOC_004022 
XLOC_002278 

项目list3:

XLOC_004860 
XLOC_004022 
XLOC_006292 
XLOC_006616 
XLOC_013802 

我想提取所有列表对之间的共同元素。我尝试使用intersect,但我无法在字符上使用它,而且我也不知道如何在所有成对组合上执行此操作。

2 个答案:

答案 0 :(得分: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 :(得分:0)

使用table(我使用与@ Psidom的答案相同的li列表)也很有帮助:

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