워라밸 중독자

[R] stringr을 이용해 특정 문자(전체/맨 앞/맨 뒤) 치환 본문

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

[R] stringr을 이용해 특정 문자(전체/맨 앞/맨 뒤) 치환

Ufungi 2023. 10. 19. 09:20

str_starts 는 각 벡터의 요소가 특정 문자로 시작하는지/아닌지를 TRUE/FALSE로 반환한다. 이 결과값을 이용해 특정 요소들을 indexing 할 수 있다.

 

str_ends 는 각 벡터의 요소가 특정 문자로 끝나는지/아닌지를 TRUE/FALSE로 반환한다.

 

str_replace는 특정 문자를 원하는 문자로 치환한다.

library(dplyr)
library(stringr)

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;"

# remove "
merged$EC_number %>% str_replace('"','')

# remove ; at the start. paste0을 이용해 @을 붙여서 맨 앞의 ; 를 중간의 ; 와 차별화한다.
str_starts(merged$EC_number,";") %>% head()
[1] FALSE FALSE FALSE FALSE FALSE FALSE

merged$EC_number[str_starts(merged$EC_number,";")] <- 
  paste0("@",merged$EC_number[str_starts(merged$EC_number,";")]) %>% 
  str_replace('@;','')

# remove ; at the end. paste0을 이용해 @을 붙여서 맨 뒤의 ; 를 중간의 ; 와 차별화한다.
head(str_ends(merged$EC_number,";"))
[1] FALSE FALSE FALSE FALSE FALSE FALSE

merged$EC_number[str_ends(merged$EC_number,";")] <- 
  paste0(merged$EC_number[str_ends(merged$EC_number,";")],"@") %>% 
  str_replace(';@','')