R,如何从字符串列表创建二元关系矩阵?

R, how to create a binary relation matrix from a list of strings?

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

例如,这是我的文件 aaabbbcccddd 以及与它们相关的基因。

aaa=c("HERC1")
bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2")
ccc=c("HERC1")
ddd=c("MACC1","PKHD1L1")

我想知道我可以在 R 中使用哪个命令来生成二元关系 table,如下图所示:

其中值1表示关联,值0表示不关联。

如何在 R 中执行此操作?

我尝试使用 table(aaa,bbb,ccc,ddd) 但它没有用。 R 说:

Error in table(aaa, bbb, ccc, ddd) : all arguments must have the same length

编辑:感谢@akrun 的有用回复!我会利用这个问题来为 另一个问题 寻求帮助,我相信你们可以很快处理。对于我分析的第二部分,我需要生成另一个 table ,其中 对于每对基因,如果它们都存在于特定文件中,我分配值 1,其他为 0明智。按照我之前给出的示例,这个新的 table 应该如下所示(我将其转置以澄清):

有谁知道从你们已经提供给我的命令开始在 R 中获得这个新的生物基因 table 的快速方法吗?谢谢!

一个选项是获取命名 list (mget) 中的对象标识符的值,stack 它到两列 data.frame 并获取table

的频率
table(stack( mget(strrep(letters[1:4], 3)))[2:1])
#   values
#ind   HERC1 MACC1 MYO9A PKHD1L1 PQLC2 SLC7A2
#  aaa     1     0     0       0     0      0
#  bbb     0     0     1       1     1      1
#  ccc     1     0     0       0     0      0
#  ddd     0     1     0       1     0      0

或带有 tidyverse

的选项
library(tidyverse)
lst(aaa, bbb, ccc, ddd) %>% 
  enframe %>% 
  unnest %>% 
  count(name, value) %>% 
  spread(value, n, fill = 0)
# A tibble: 4 x 7
#  name  HERC1 MACC1 MYO9A PKHD1L1 PQLC2 SLC7A2
#  <chr> <dbl> <dbl> <dbl>   <dbl> <dbl>  <dbl>
#1 aaa       1     0     0       0     0      0
#2 bbb       0     0     1       1     1      1
#3 ccc       1     0     0       0     0      0
#4 ddd       0     1     0       1     0      0

在 OP 的代码中

table(aaa,bbb,ccc,ddd)

vectorlength 需要相同才能使 table 工作。此外,如果我们使用超过 2 个向量,频率 table 将是 multi-dimensional (> 2D)。因此,我们需要一个框架来将 table 应用于两列而不是多个对象