Operate string with stringr

Tidyverse stringr manipulate data

stringr 패키지로 문자를 조작하는 방법을 숙지합니다.

유충현 https://choonghyunryu.github.io (한국알사용자회)
2022-02-27

들어가기

나랏말쌈이 듕국과 달라도, 문자열 데이터를 파싱하고 조작하는 방법은 동일합니다.
정규표현식이라는 세계 공통 기술의 기초를 알고 있는 당신은,
이제, stringr 패키지를 이용해 보세요. 이름에도 문자열이 있으니 전용 패키지 같은 느낌이 듭니다.


미리보기

대표함수 목록

stringr 패키지의 대표적인 함수는 “str_”로 시작하게 작명되었습니다. 다음의 함수들이 대표적인 함수들입니다. 함수 이름을 통해서 개별 함수들의 기능을 유출할 수 있습니다. 도움말을 보면 완벽하게 이해할 수 있겠죠?

library(stringr)

ls(pos = "package:stringr", pattern = "^str_") %>% 
  str_subset("<", negate = TRUE)
 [1] "str_c"           "str_conv"        "str_count"      
 [4] "str_detect"      "str_dup"         "str_ends"       
 [7] "str_extract"     "str_extract_all" "str_flatten"    
[10] "str_glue"        "str_glue_data"   "str_interp"     
[13] "str_length"      "str_locate"      "str_locate_all" 
[16] "str_match"       "str_match_all"   "str_order"      
[19] "str_pad"         "str_remove"      "str_remove_all" 
[22] "str_replace"     "str_replace_all" "str_replace_na" 
[25] "str_sort"        "str_split"       "str_split_fixed"
[28] "str_squish"      "str_starts"      "str_sub"        
[31] "str_subset"      "str_to_lower"    "str_to_sentence"
[34] "str_to_title"    "str_to_upper"    "str_trim"       
[37] "str_trunc"       "str_view"        "str_view_all"   
[40] "str_which"       "str_wrap"       


대표함수 기능

함수이름 반환 데이터 유형 함수 기능 유사 기능 함수
str_c character 문자열을 묶음 paste
str_conv character 문자열의 인코딩 변경 Encoding
str_count integer (포함) 글자수 계산 nchar
str_detect logical 패턴 포함 여부 grep
str_ends logical 패턴으로 끝나는지 여부
str_extract character 패턴 매치 추출
str_extract_all character 모든 패턴 매치 추출
str_flatten character 문자열을 묶음 paste
str_glue character 문자열 표현식 결과와 묶음
str_glue_data character 데이터와 문자열 표현식 결과를 묶음
str_interp character 파라미터를 받아 적절한 문장 생성 sprintf
str_length integer 글자수 계산 nchar
str_locate integer matrix 패턴매치 (시작, 끝) 위치 반환
str_locate_all integer matrix 모든 패턴매치 (시작, 끝) 위치 반환
str_match character matrix 패턴 매치 추출
str_match_all character matrix 모든 패턴 매치 추출
str_order integer 문자열 벡터의 사전 순서 반환 order
str_pad character 문자열 공백 채움
str_remove character 패턴 매치 제거 sub
str_remove_all character 패턴 매치 전체 제거 gsub
str_replace_all character 패턴 매치 대체 sub
str_replace_na character 패턴 매치 전체 대체 gsub
str_sort character 문자열 벡터의 사전 순서 정렬 sort
str_split list 특정문자로 문자열 나눔 strsplit
str_split_fixed list 특정문자로 갯수만큼 문자열 나눔 strsplit
str_squish character 불필요 화이트스페이스 제거
str_starts logical 패턴으로 시작하는지 여부
str_sub character 문자열 부분제거 및 대체 substring
str_subset character 패턴포함 문자열 반환 grep
str_to_lower character 소문자로 변경 tolower
str_to_sentence character 영어문장 포맷으로 변경
str_to_title character 타이틀 포맷으로 변경 (캡문자 변경)
str_to_upper character 대문자로 변경 toupper
str_trim character 문자열 앞뒤 공백 제거
str_trunc character 문자열을 길이에 부합하게 줄여줌
str_view HTML rendering 패턴매치 문자열을 웹에서 조회함
str_view_all HTML rendering 모든 패턴매치 문자열을 웹에서 조회
str_which integer 문자벡터의 패턴매치 위치 반환
str_wrap character 문자열 줄바꿈 처리

대표함수 예제

문자열 포맷 바꾸기

한글에서는 필요하지 않는 기능이나, 영문에서는 유용한 기능입니다.

dog <- "The quick brown dog"
str_to_upper(dog)
[1] "THE QUICK BROWN DOG"
[1] "the quick brown dog"
[1] "The Quick Brown Dog"
str_to_sentence("the quick brown dog")
[1] "The quick brown dog"
mountain <- "동해물과 백두산이 마르고 닳도록"
str_to_upper(mountain)
[1] "동해물과 백두산이 마르고 닳도록"
str_to_lower(mountain)
[1] "동해물과 백두산이 마르고 닳도록"
str_to_title(mountain)
[1] "동해물과 백두산이 마르고 닳도록"

문자열 정리하기

화이트 스페이스 제거

문자열 앞 뒤에 있는 불필요한 공백 등을 제거할 때 유용합니다.

mountain <- "  동해물과 백두산이 마르고 닳도록"
mountain2 <- "\n\n동해물과 백두산이 마르고 닳도록\n\n"

str_trim(mountain)
[1] "동해물과 백두산이 마르고 닳도록"
str_trim(mountain2)
[1] "동해물과 백두산이 마르고 닳도록"
str_squish(mountain)
[1] "동해물과 백두산이 마르고 닳도록"
str_squish(mountain2)
[1] "동해물과 백두산이 마르고 닳도록"

공백 채우기

문장의 길이를 맞추기 위해서 문자열 앞 뒤에 공백을 채웁니다.

str_pad("뚜벅뚜벅 걷다가 뒤돌아", 25, "left")
[1] "   뚜벅뚜벅 걷다가 뒤돌아"
str_pad("뚜벅뚜벅 걷다가 뒤돌아", 25, "right")
[1] "뚜벅뚜벅 걷다가 뒤돌아   "
str_pad("뚜벅뚜벅 걷다가 뒤돌아", 25, "both")
[1] " 뚜벅뚜벅 걷다가 뒤돌아  "

줄바꿈 처리

문장의 길이를 맞추기 위해서 정해진 자리수에서 개행합니다.

str_wrap ("뚜벅뚜벅 걷다가 뒤돌아", 8)
[1] "뚜벅뚜벅\n걷다가\n뒤돌아"

지정 길이로 변경

문자열의 길이를 맞추기 위해서 길이가 넘쳐나는 문자열을 줄여줍니다.

str_trunc ("뚜벅뚜벅 걷다가 뒤돌아", 10)
[1] "뚜벅뚜벅 걷다..."

문자열 길이 관련 처리

글자수 계산

문자열의 길이를 계산합니다.

star <- "  별 하나에 추억과 별 하나에 사랑과"
star2 <- "\n\n별 하나에 추억과\n\n별 하나에 사랑과"

str_length(star)
[1] 21
str_length(star2)
[1] 22
str_count(star)
[1] 21
str_count(star2)
[1] 22
str_count(star, "별")
[1] 2
str_count(star2, "\n")
[1] 4

문자열 정렬과 순서

문자열 정렬과 순서

문자열을 정렬하거나, 사전적 순서를 계산합니다.

city <- c("서울", "춘천", "군산", "제주", "경주")

str_order(city)
[1] 5 3 1 4 2
str_sort(city)
[1] "경주" "군산" "서울" "제주" "춘천"

문자열 결합

문자열 결합

여러 문자열을 하나로 결합합니다.

city <- c("서울", "춘천", "군산", "제주", "경주")

str_c("도시: ", city)
[1] "도시: 서울" "도시: 춘천" "도시: 군산" "도시: 제주" "도시: 경주"
str_flatten(city, "-")
[1] "서울-춘천-군산-제주-경주"

파라미터 이용 문자열 결합

문자열을 변수들의 값을 동적으로 받아서 꾸며줍니다.

Phi <- "파이"

str_glue("원주율을 {Phi}라고 하며, 대략 {pi}이다.")
원주율을 파이라고 하며, 대략 3.14159265358979이다.
str_interp("원주율을 {Phi}라고 하며, 대략 $[.2f]{pi}이다.")
[1] "원주율을 {Phi}라고 하며, 대략 3.14이다."

문자열 자르기

문자열 패턴 분리

문자열의 특정 패턴을 구분자로하여 나눠줍니다.

star3 <- " 별 하나에 추억과 별 하나에 사랑과 별 하나에 쓸쓸함과"


str_split(star3, "과[[:space:]]*")
[[1]]
[1] " 별 하나에 추억"  "별 하나에 사랑"   "별 하나에 쓸쓸함"
[4] ""                
str_split(star3, "과[[:space:]]*") %>% 
  unlist() %>% 
  str_subset("별")
[1] " 별 하나에 추억"  "별 하나에 사랑"   "별 하나에 쓸쓸함"
# 2개로 나눔
str_split_fixed(star3, "과[[:space:]]*", n = 2)
     [,1]              [,2]                                 
[1,] " 별 하나에 추억" "별 하나에 사랑과 별 하나에 쓸쓸함과"

문자열 패턴 매치

문자열 패턴 매치 여부

매턴 매치되는 문자열을 논리값으로 알려줍니다.

fruit <- c("apple", "banana", "pear", "pinapple")

str_detect(fruit, "a")
[1] TRUE TRUE TRUE TRUE
str_detect(fruit, "a$")
[1] FALSE  TRUE FALSE FALSE
str_starts(fruit, "p")
[1] FALSE FALSE  TRUE  TRUE
str_starts(fruit, "p", negate = TRUE)
[1]  TRUE  TRUE FALSE FALSE
str_ends(fruit, "e")
[1]  TRUE FALSE FALSE  TRUE
str_ends(fruit, "e", negate = TRUE)
[1] FALSE  TRUE  TRUE FALSE

문자열 패턴 매치 위치

매턴 매치되는 문자열이 몇번째 위치인지 정수로로 알려줍니다.

fruit <- c("apple", "banana", "pear", "pinapple")

str_locate(fruit, "$")
     start end
[1,]     6   5
[2,]     7   6
[3,]     5   4
[4,]     9   8
str_locate(fruit, "a")
     start end
[1,]     1   1
[2,]     2   2
[3,]     3   3
[4,]     4   4
str_locate(fruit, c("a", "b", "p", "p"))
     start end
[1,]     1   1
[2,]     1   1
[3,]     1   1
[4,]     1   1
str_locate_all(fruit, "a")
[[1]]
     start end
[1,]     1   1

[[2]]
     start end
[1,]     2   2
[2,]     4   4
[3,]     6   6

[[3]]
     start end
[1,]     3   3

[[4]]
     start end
[1,]     4   4
str_locate_all(fruit, c("a", "b", "p", "p"))
[[1]]
     start end
[1,]     1   1

[[2]]
     start end
[1,]     1   1

[[3]]
     start end
[1,]     1   1

[[4]]
     start end
[1,]     1   1
[2,]     5   5
[3,]     6   6

문자열 패턴 매치 추출

문자열에서 패턴 매치된 값들을 보여줍니다.

fruit <- c("apple", "banana", "pear", "pinapple")

str_subset(fruit, "^a")
[1] "apple"
str_subset(fruit, "a$")
[1] "banana"
str_subset(fruit, "b")
[1] "banana"
str_subset(fruit, "[aeiou]")
[1] "apple"    "banana"   "pear"     "pinapple"
str_extract(fruit, "na")
[1] NA   "na" NA   "na"
str_extract(fruit, "^p")
[1] NA  NA  "p" "p"
str_extract_all(fruit, "na")
[[1]]
character(0)

[[2]]
[1] "na" "na"

[[3]]
character(0)

[[4]]
[1] "na"
str_extract_all(fruit, "^p")
[[1]]
character(0)

[[2]]
character(0)

[[3]]
[1] "p"

[[4]]
[1] "p"
str_match(fruit, "a")
     [,1]
[1,] "a" 
[2,] "a" 
[3,] "a" 
[4,] "a" 
str_match_all(fruit, "a")
[[1]]
     [,1]
[1,] "a" 

[[2]]
     [,1]
[1,] "a" 
[2,] "a" 
[3,] "a" 

[[3]]
     [,1]
[1,] "a" 

[[4]]
     [,1]
[1,] "a" 

문자열 패턴 매치 제거

문자열에서 패턴 매치된 값들을 제거합니다.

fruits <- c("one apple", "two pears", "three bananas")

str_remove(fruits, "[aeiou]")
[1] "ne apple"     "tw pears"     "thre bananas"
str_remove_all(fruits, "[aeiou]")
[1] "n ppl"    "tw prs"   "thr bnns"

문자열 패턴 매치 대체

문자열에서 패턴 매치된 값들을 다른 값으로 대체합니다.

fruits <- c("one apple", "two pears", "three bananas")

str_replace(fruits, "[aeiou]", "-")
[1] "-ne apple"     "tw- pears"     "thr-e bananas"
str_replace_all(fruits, "[aeiou]", "-")
[1] "-n- -ppl-"     "tw- p--rs"     "thr-- b-n-n-s"
str_replace_all(fruits, "[aeiou]", toupper)
[1] "OnE ApplE"     "twO pEArs"     "thrEE bAnAnAs"
str_replace_all(fruits, "b", NA_character_)
[1] "one apple" "two pears" NA         

Citation

For attribution, please cite this work as

유충현 (2022, Feb. 27). Dataholic: Operate string with stringr. Retrieved from https://choonghyunryu.github.io/2022-02-27-stringr

BibTeX citation

@misc{유충현2022operate,
  author = {유충현, },
  title = {Dataholic: Operate string with stringr},
  url = {https://choonghyunryu.github.io/2022-02-27-stringr},
  year = {2022}
}