将此列表转换为长列表

Converting this list to a long list

我有一个转录因子和蛋白质的列表,它们假定如下所示

[![在此处输入图片描述][1]][1]

我想要两列数据,第一列是转录因子,第二列是每个细胞一个单独的蛋白质,如下所示,正如您所见,第一列中每个转录因子都在重复

有什么帮助吗?

这个有用吗:

library(tidyr)
library(dplyr)

df %>% separate_rows(Proteins, sep = ';')
# A tibble: 15 x 2
   TFs   Proteins
   <chr> <chr>   
 1 HNF4A HNF4A   
 2 HNF4A SUB1    
 3 E2F1  RB1     
 4 E2F1  E2F1    
 5 E2F1  E2F1    
 6 E2F1  TFDP1   
 7 E2F1  GABPB2  
 8 E2F1  CCNA2   
 9 E2F1  RBL1    
10 E2F1  E2F1    
11 E2F1  RB1     
12 E2F1  E2F1    
13 E2F1  CEBPE   
14 E2F1  E2F1    
15 E2F1  TFDP1   

使用的数据:

df
    TFs          Proteins
1 HNF4A        HNF4A;SUB1
2  E2F1          RB1;E2F1
3  E2F1 E2F1;TFDP1;GABPB2
4  E2F1   CCNA2;RBL1;E2F1
5  E2F1    RB1;E2F1;CEBPE
6  E2F1        E2F1;TFDP1
  library(tidyverse)

 df %>% separate_rows(Proteins, sep = ";")

# A tibble: 15 x 2
   TFs   Proteins
   <chr> <chr>   
 1 HNF4A HNF4A   
 2 HNF4A SUB1    
 3 E2F1  RB1     
 4 E2F1  E2F1    
 5 E2F1  E2F1    
 6 E2F1  TFDP1   
 7 E2F1  GABPB2  
 8 E2F1  CCNA2   
 9 E2F1  RBL1    
10 E2F1  E2F1    
11 E2F1  RB1     
12 E2F1  E2F1    
13 E2F1  CEBPE   
14 E2F1  E2F1    
15 E2F1  TFDP1 

data.table

library(data.table)
setDT(df)[, list(Proteins = unlist(strsplit(Proteins, split = ";"))), by = TFs]

     TFs Proteins
 1: HNF4A    HNF4A
 2: HNF4A     SUB1
 3:  E2F1      RB1
 4:  E2F1     E2F1
 5:  E2F1     E2F1
 6:  E2F1    TFDP1
 7:  E2F1   GABPB2
 8:  E2F1    CCNA2
 9:  E2F1     RBL1
10:  E2F1     E2F1
11:  E2F1      RB1
12:  E2F1     E2F1
13:  E2F1    CEBPE
14:  E2F1     E2F1
15:  E2F1    TFDP1