如何从二进制 table/matrix 创建表达式输入样式格式?
How to create expression input style format from binary table/matrix?
我的 R 脚本中有这样的二进制 table:
>class(forCount)
[1] "table"
>forCount
Gene
Filename CTX-M-27 IMI-1 IMP-39 IMP-4 KPC-2 NDM-1
batch0_01032019_ENT1 0 1 0 0 0 1
batch0_01032019_ENT2 0 0 0 0 1 1
batch0_01032019_ENT3 0 0 0 0 0 1
batch0_01032019_ENT4 0 0 0 0 0 1
batch0_01032019_ENT5 0 0 0 0 0 1
batch0_01032019_ENT6 0 0 0 0 0 1
batch0_01032019_ENT7 0 0 0 0 0 1
如何从中获取以下信息?
NDM-1 5
NDM-1&IMI-1 1
NDM-1&KPC-2 1
Edit1:以上数据是虚拟数据。根据@RonakShah 请求添加输出信息。这是我在 table.
中的数据样本
> dput(forCount)
structure(c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L), .Dim = c(6L, 16L), .Dimnames = structure(list(AssemblyFile = c("batch0_01032019_ENT1110",
"batch0_01032019_ENT1125", "batch0_01032019_ENT1332", "batch0_01032019_ENT1349",
"batch0_01032019_ENT1449", "batch0_01032019_ENT1607"), CPGene = c("",
"CTX-M-27", "IMI-1", "IMP-39", "IMP-4", "KPC-2", "NDM-1", "NDM-4",
"NDM-5", "NDM-7", "NDM-9", "OXA-181", "OXA-23", "OXA-232", "OXA-48",
"VIM-4")), .Names = c("AssemblyFile", "CPGene")), class = "table")
从上面粘贴的 dput 数据,我期望得到以下输出,它来自 6 个样本,5 个样本有 KPC-2,1 个样本有 KPC-2 和 CTX-M-27。
KPC-2 5
KPC-2&CTX-M-27 1
您可以将 table 转换为数据框并将列名粘贴到每行中,其中的值是 1,然后使用 table
计算它们的出现次数。
df <- as.data.frame.matrix(forCount)
table(apply(df, 1, function(x) paste(names(df)[which(x == 1)], collapse = " & ")))
#CTX-M-27 & KPC-2 KPC-2
# 1 5
我们可以将数据转换为tibble
,然后使用tidyverse
方法
library(dplyr)
as_tibble(forCount) %>%
filter(n ==1) %>%
group_by(AssemblyFile) %>%
summarise(CPGene = toString(CPGene)) %>%
count(CPGene)
# A tibble: 2 x 2
# CPGene n
#* <chr> <int>
#1 CTX-M-27, KPC-2 1
#2 KPC-2 5
我的 R 脚本中有这样的二进制 table:
>class(forCount)
[1] "table"
>forCount
Gene
Filename CTX-M-27 IMI-1 IMP-39 IMP-4 KPC-2 NDM-1
batch0_01032019_ENT1 0 1 0 0 0 1
batch0_01032019_ENT2 0 0 0 0 1 1
batch0_01032019_ENT3 0 0 0 0 0 1
batch0_01032019_ENT4 0 0 0 0 0 1
batch0_01032019_ENT5 0 0 0 0 0 1
batch0_01032019_ENT6 0 0 0 0 0 1
batch0_01032019_ENT7 0 0 0 0 0 1
如何从中获取以下信息?
NDM-1 5
NDM-1&IMI-1 1
NDM-1&KPC-2 1
Edit1:以上数据是虚拟数据。根据@RonakShah 请求添加输出信息。这是我在 table.
中的数据样本> dput(forCount)
structure(c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L), .Dim = c(6L, 16L), .Dimnames = structure(list(AssemblyFile = c("batch0_01032019_ENT1110",
"batch0_01032019_ENT1125", "batch0_01032019_ENT1332", "batch0_01032019_ENT1349",
"batch0_01032019_ENT1449", "batch0_01032019_ENT1607"), CPGene = c("",
"CTX-M-27", "IMI-1", "IMP-39", "IMP-4", "KPC-2", "NDM-1", "NDM-4",
"NDM-5", "NDM-7", "NDM-9", "OXA-181", "OXA-23", "OXA-232", "OXA-48",
"VIM-4")), .Names = c("AssemblyFile", "CPGene")), class = "table")
从上面粘贴的 dput 数据,我期望得到以下输出,它来自 6 个样本,5 个样本有 KPC-2,1 个样本有 KPC-2 和 CTX-M-27。
KPC-2 5
KPC-2&CTX-M-27 1
您可以将 table 转换为数据框并将列名粘贴到每行中,其中的值是 1,然后使用 table
计算它们的出现次数。
df <- as.data.frame.matrix(forCount)
table(apply(df, 1, function(x) paste(names(df)[which(x == 1)], collapse = " & ")))
#CTX-M-27 & KPC-2 KPC-2
# 1 5
我们可以将数据转换为tibble
,然后使用tidyverse
方法
library(dplyr)
as_tibble(forCount) %>%
filter(n ==1) %>%
group_by(AssemblyFile) %>%
summarise(CPGene = toString(CPGene)) %>%
count(CPGene)
# A tibble: 2 x 2
# CPGene n
#* <chr> <int>
#1 CTX-M-27, KPC-2 1
#2 KPC-2 5