首页 > 解决方案 > 拆分 | 并列出频率

问题描述

我有一个由一列组成的 data.frame,如下所示:

       E1| 
       E3|SAMD11 
       E3|SAMD11 
       E2|SAMD11 
       E10|SAMD11 
       E10|SAMD11 
       E10|SAMD11 
       E10|SAMD11 
       E10|SAMD11 
       E1|
       E2|
       E3| 
       E3|PERM1
       E9|AL645608.7;HES4;ISG15
       E3|EGFR;HES4;PIK3CA

E* 是从 1 到 10 我想计算每个基因删除或忽略 E| 的情况下我有多少 E* 后面是空的。所需的输出将是:

SAMD11: E3: 2
SAMD11: E2: 1
SAMD11: E10: 5
PERM1:  E3: 1 
HES4:   E9: 1
HES4:   E3: 1
AL645608.7 E9:1
ISG15:  E9: 1
EGFR:   E3: 1
PIK3CA E3: 1

任何人都可以帮助我吗?

标签: r

解决方案


library(dplyr)
library(tidyr)
#split on | then separate on ; 
df %>% extract(id, into=c('id','gene'), regex="(.*)\\|(.*)?") %>% 
       separate_rows(gene, sep='\\;') %>% 
       filter(gene!="") %>% 
       count(gene, id)

# A tibble: 10 x 3
   gene       id        n
   <chr>      <chr> <int>
 1 AL645608.7 E9        1
 2 EGFR       E3        1
 3 HES4       E3        1
 4 HES4       E9        1
 5 ISG15      E9        1
 6 PERM1      E3        1
 7 PIK3CA     E3        1
 8 SAMD11     E10       5
 9 SAMD11     E2        1
10 SAMD11     E3        2

推荐阅读