워라밸 중독자

[R] 1:1 테이블을 1:n 테이블로 만들기 본문

코딩, 딱 지금이 시작할때! (코딱지)

[R] 1:1 테이블을 1:n 테이블로 만들기

Ufungi 2023. 10. 18. 17:03

아래  raven 테이블과 ori.EC 테이블은 1:1 형식이긴 하지만

locus_tag, EC_number 값 모두 중복되어있다

즉,

하나의 EC_number에 여러 locus_tag가,

하나의 locus_tag에 여러 EC_number가 매칭되어있다.

# Load library
library(tidyr)
library(dplyr)

head(raven)
# A tibble: 6 × 2
  EC_number locus_tag
  <chr>     <chr>    
1 3.1.3.18  g12670   
2 3.1.3.18  g14288   
3 2.1.1.355 g660     
4 2.1.1.355 g724     
5 2.7.4.7   g1947    
6 2.7.1.150 g3825  

head(ori.EC)
   locus_tag EC_number
1:     g4318   7.6.2.2
2:     g8986   7.6.2.2
3:    g10380   7.6.2.2
4:    g10994   7.6.2.2
5:    g10995   7.6.2.2
6:    g14040   7.6.2.2

# Just glue raven and ori.EC tables
merged <- rbind(raven, ori.EC)
head(merged)
# A tibble: 6 × 2
  EC_number locus_tag
  <chr>     <chr>    
1 3.1.3.18  g12670   
2 3.1.3.18  g14288   
3 2.1.1.355 g660     
4 2.1.1.355 g724     
5 2.7.4.7   g1947    
6 2.7.1.150 g3825    

# concatenated EC numbers by locus_tag using ";" (1:n table)
merged <- merged %>%
  group_by(locus_tag) %>%
  summarise(EC_number = paste(unique(EC_number), collapse = ";"))

head(merged, n=20)
# A tibble: 20 × 2
   locus_tag EC_number                    
   <chr>     <chr>                        
 1 ""        ""                           
 2 "g1"      ""                           
 3 "g10"     ""                           
 4 "g100"    ""                           
 5 "g1000"   ""                           
 6 "g10000"  ""                           
 7 "g10001"  ""                           
 8 "g10002"  ""                           
 9 "g10003"  ""                           
10 "g10004"  ""                           
11 "g10005"  ""                           
12 "g10006"  ""                           
13 "g10007"  "2.7.11.24;"                 
14 "g10008"  ""                           
15 "g10009"  ""                           
16 "g1001"   ""                           
17 "g10010"  ""                           
18 "g10011"  ""                           
19 "g10012"  ""                           
20 "g10013"  "3.4.17.b;3.4.16.5;3.4.16.6;"

locus_tag 를 기준으로 EC_number가 ";"로 깔끔하게 합쳐진 것을 볼 수 있다.