R - 如何提取二进制矩阵中组之间的唯一交集?
R - How to extract unique intersections between groups in a binary matrix?
亲爱的 Whosebug 用户,
我是使用 R 语言分析生物数据的初学者,我正面临一个我无法解决的问题 - 也许更有经验的人可以帮助我解决这个问题?
我有一个大型数据框,它是一个二进制矩阵。
每行代表一个不同的基因;每列在实验中的不同条件。
细胞中的“1”表示基因存在于给定条件下,
“0”表示该基因不存在。
如何获得一个向量,其中行的行名仅在给定列中包含“1”,而在其他列中不包含“1”(即,在该条件下唯一存在的基因?)
以及如何获得一个向量,其中行的行名在指定的一组列中包含“1”,但在所有其他列中包含“0”(即,在条件/列 1 中唯一存在的基因,例如 2 和 5?
期待您的建议!
非常感谢:-)
这里有可能使用 tidyverse
包。
由于您没有提供任何数据,我创建了一些虚拟数据,如下所示:
编辑:我包含了行名
> mydata
A B C D E
id_1 0 1 1 0 0
id_2 0 1 0 1 0
id_3 1 1 1 1 0
id_4 1 0 0 0 0
id_5 0 0 1 1 1
id_6 1 0 1 0 0
所以我有 6 行(名为 id_1 到 id_6)和 5 列,名为 A 到 E。
假设我要筛选 "B" 和 "D" 等于 1 且其他列等于零的所有行。
可以这样做:
library(tidyverse)
mydata %>% as_tibble(rownames = "id") %>%
filter_at(vars(c("B", "D")), all_vars(. == 1)) %>%
filter_at(vars(-c("B", "D", "id")), all_vars(. == 0))
# A tibble: 1 x 6
id A B C D E
<chr> <int> <int> <int> <int> <int>
1 id_2 0 1 0 1 0
亲爱的 Whosebug 用户,
我是使用 R 语言分析生物数据的初学者,我正面临一个我无法解决的问题 - 也许更有经验的人可以帮助我解决这个问题?
我有一个大型数据框,它是一个二进制矩阵。 每行代表一个不同的基因;每列在实验中的不同条件。
细胞中的“1”表示基因存在于给定条件下, “0”表示该基因不存在。
如何获得一个向量,其中行的行名仅在给定列中包含“1”,而在其他列中不包含“1”(即,在该条件下唯一存在的基因?)
以及如何获得一个向量,其中行的行名在指定的一组列中包含“1”,但在所有其他列中包含“0”(即,在条件/列 1 中唯一存在的基因,例如 2 和 5?
期待您的建议!
非常感谢:-)
这里有可能使用 tidyverse
包。
由于您没有提供任何数据,我创建了一些虚拟数据,如下所示:
编辑:我包含了行名
> mydata
A B C D E
id_1 0 1 1 0 0
id_2 0 1 0 1 0
id_3 1 1 1 1 0
id_4 1 0 0 0 0
id_5 0 0 1 1 1
id_6 1 0 1 0 0
所以我有 6 行(名为 id_1 到 id_6)和 5 列,名为 A 到 E。
假设我要筛选 "B" 和 "D" 等于 1 且其他列等于零的所有行。 可以这样做:
library(tidyverse)
mydata %>% as_tibble(rownames = "id") %>%
filter_at(vars(c("B", "D")), all_vars(. == 1)) %>%
filter_at(vars(-c("B", "D", "id")), all_vars(. == 0))
# A tibble: 1 x 6
id A B C D E
<chr> <int> <int> <int> <int> <int>
1 id_2 0 1 0 1 0