R 如何从字符串列表中创建成对出现的二进制关系矩阵?

R 如何从字符串列表中创建成对出现的二进制关系矩阵?,r,contingency,R,Contingency,有一个包含特定基因的文件列表,我想在R中创建一个二进制关系矩阵,显示每个文件中每个基因的存在 例如,这里是我的文件aaa,bbb,ccc,和ddd,以及与它们相关的基因 aaa=c("HERC1") bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2") ccc=c("HERC1") ddd=c("MACC1","PKHD1L1") 我需要生成另一个表,其中,对于每对基因,如果它们都存在于特定文件中,我将赋值为1,否则赋值为0。按照我前面给出的示例,这个新表应

有一个包含特定基因的文件列表,我想在R中创建一个二进制关系矩阵,显示每个文件中每个基因的存在

例如,这里是我的文件
aaa
bbb
ccc
,和
ddd
,以及与它们相关的基因

aaa=c("HERC1")
bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2")
ccc=c("HERC1")
ddd=c("MACC1","PKHD1L1")
我需要生成另一个表,其中,对于每对基因,如果它们都存在于特定文件中,我将赋值为1,否则赋值为0。按照我前面给出的示例,这个新表应该如下所示:


有人知道在R中获得这个新的bigenic表的快速方法吗?谢谢

假设您可以将文件读入一个命名列表,下面是使用
tidyverse
-

file_list <- list(aaa = aaa, bbb = bbb, ccc = ccc, ddd = ddd)

result <- stack(file_list) %>% 
  inner_join(stack(file_list), by = c("ind" = "ind")) %>% 
  select(gene1 = values.x, gene2 = values.y, file_name = ind) %>%
  mutate(n = 1) %>% 
  complete(gene1, gene2, file_name, fill = list(n = 0)) %>% 
  filter(gene1 != gene2,
         !duplicated(
           apply(., 1, function(x) paste0(sort(x), collapse = ""))
         )
  ) %>% 
  spread(file_name, n)

# A tibble: 15 x 6
   gene1   gene2     aaa   bbb   ccc   ddd
   <chr>   <chr>   <dbl> <dbl> <dbl> <dbl>
 1 HERC1   MACC1       0     0     0     0
 2 HERC1   MYO9A       0     0     0     0
 3 HERC1   PKHD1L1     0     0     0     0
 4 HERC1   PQLC2       0     0     0     0
 5 HERC1   SLC7A2      0     0     0     0
 6 MACC1   MYO9A       0     0     0     0
 7 MACC1   PKHD1L1     0     0     0     1
 8 MACC1   PQLC2       0     0     0     0
 9 MACC1   SLC7A2      0     0     0     0
10 MYO9A   PKHD1L1     0     1     0     0
11 MYO9A   PQLC2       0     1     0     0
12 MYO9A   SLC7A2      0     1     0     0
13 PKHD1L1 PQLC2       0     1     0     0
14 PKHD1L1 SLC7A2      0     1     0     0
15 PQLC2   SLC7A2      0     1     0     0 
文件列表%
选择(gene1=values.x,gene2=values.y,file_name=ind)%>%
突变(n=1)%>%
完成(gene1,gene2,文件名,fill=list(n=0))%>%
过滤器(gene1!=gene2,
!重复(
应用(,1,函数(x)粘贴0(排序(x),折叠=))
)
) %>% 
排列(文件名,n)
#一个tibble:15x6
gene1 gene2 aaa bbb ccc ddd
1 HERC1 MACC1 0 0 0 0
2 HERC1 MYO9A 0 0 0 0
3 HERC1 PKHD1L1 0 0 0 0
4 HERC1 PQLC2 0 0 0
5 HERC1 SLC7A2 0 0 0
6 MACC1 MYO9A 0 0 0
7 MACC1 PKHD1L1 0 0 1
8 MACC1 PQLC2 0 0 0
9 MACC1 SLC7A2 0 0 0
10 MYO9A PKHD1L1 0
11 MYO9A PQLC2 0 1 0 0
12 MYO9A SLC7A2 0 1 0 0
13 PKHD1L1 PQLC2 0 1 0 0
14 PKHD1L1 SLC7A2 0 1 0 0
15 PQLC2 SLC7A2 0 1 0 0 0