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"
str_to_lower(dog)
[1] "the quick brown dog"
str_to_title(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
문자열을 정렬하거나, 사전적 순서를 계산합니다.
[1] 5 3 1 4 2
str_sort(city)
[1] "경주" "군산" "서울" "제주" "춘천"
여러 문자열을 하나로 결합합니다.
[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
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} }