首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从二进制表/矩阵创建表达式输入样式格式?

如何从二进制表/矩阵创建表达式输入样式格式?
EN

Stack Overflow用户
提问于 2020-04-07 18:08:52
回答 2查看 49关注 0票数 2

我的R脚本中有一个像这样的二进制表格:

代码语言:javascript
运行
复制
>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

我如何从中获取以下信息?

代码语言:javascript
运行
复制
NDM-1                  5
NDM-1&IMI-1        1
NDM-1&KPC-2      1

Edit1:上面的数据是虚拟数据。根据@RonakShah请求添加dput信息。这是表中我的数据示例。

代码语言:javascript
运行
复制
> 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。

代码语言:javascript
运行
复制
KPC-2                       5
KPC-2&CTX-M-27     1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-07 19:32:19

您可以将表转换为dataframe,并将列名粘贴到值为1的每一行中,然后使用table计算它们的出现次数。

代码语言:javascript
运行
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2020-04-08 03:58:31

我们可以将数据转换为tibble,然后使用tidyverse方法

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61077553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档