如何从字符串列表中创建成对出现的二元关系矩阵?
How to create a binary relation matrix of pair occurrences from a list of strings?
有一个包含特定基因的文件列表,我想在 R 中创建一个二元关系矩阵,显示每个文件中每个基因的存在。
例如,这是我的文件 aaa
、bbb
、ccc
和 ddd
以及与它们相关的基因。
aaa=c("HERC1")
bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2")
ccc=c("HERC1")
ddd=c("MACC1","PKHD1L1")
我需要生成另一个 table ,其中 对于每对基因,如果它们都存在于特定文件中,我将值分配为 1,否则分配为 0。按照我之前给出的示例,这个新的 table 应该如下所示:
有人知道在 R 中获得这种新的生物基因 table 的快速方法吗?谢谢!
假设您可以将文件读入命名列表,这是使用 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
有一个包含特定基因的文件列表,我想在 R 中创建一个二元关系矩阵,显示每个文件中每个基因的存在。
例如,这是我的文件 aaa
、bbb
、ccc
和 ddd
以及与它们相关的基因。
aaa=c("HERC1")
bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2")
ccc=c("HERC1")
ddd=c("MACC1","PKHD1L1")
我需要生成另一个 table ,其中 对于每对基因,如果它们都存在于特定文件中,我将值分配为 1,否则分配为 0。按照我之前给出的示例,这个新的 table 应该如下所示:
有人知道在 R 中获得这种新的生物基因 table 的快速方法吗?谢谢!
假设您可以将文件读入命名列表,这是使用 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