[R] stringr 문자열 관련 처리 함수
반응형
stringr
- 이번 포스팅에서는
stringr
라이브러리에서 주로 다루는 함수에 대해서 정리해보겠습니다. stringr
라이브러리는tidyverse
라이브러리를 구동할 때 같이 불러오는 라이브러리 중 하나 입니다.- 이 라이브러리는 주로 문자열 데이터를 다루는 함수를 내포하고 있습니다.
발견 관련
str_detect()
- 문자열에서 패턴의 일치여부를 찾아 논리값(TRUE 또는 FALSE)을 출력합니다.
- 논리값은 수치계산 시에 TRUE는 1, FALSE는 0으로 취급됩니다.
str_detect(string, pattern)
text <- c("자세히 보아야 예쁘다",
"오래 보아야 사랑스럽다",
"너도 그렇다")
text_df <- tibble(
seq = 1:length(text),
text = text
)
text
## [1] "자세히 보아야 예쁘다" "오래 보아야 사랑스럽다" "너도 그렇다"
text %>% str_detect(pattern = "보아야")
## [1] TRUE TRUE FALSE
text_df
## # A tibble: 3 x 2
## seq text
## <int> <chr>
## 1 1 자세히 보아야 예쁘다
## 2 2 오래 보아야 사랑스럽다
## 3 3 너도 그렇다
text_df %>%
filter(str_detect(string = text, pattern = "보아야"))
## # A tibble: 2 x 2
## seq text
## <int> <chr>
## 1 1 자세히 보아야 예쁘다
## 2 2 오래 보아야 사랑스럽다
text_df %>%
unnest_tokens(input = text, output = "word") %>%
filter(str_detect(string = word, pattern = "보아야"))
## # A tibble: 2 x 2
## seq word
## <int> <chr>
## 1 1 보아야
## 2 2 보아야
str_which()
- 문자열에서 패턴의 인덱스를 찾아 숫자값을 출력합니다.
str_which(string, pattern)
text
## [1] "자세히 보아야 예쁘다" "오래 보아야 사랑스럽다" "너도 그렇다"
text %>% str_which(pattern = "보아야")
## [1] 1 2
str_count()
- 문자열에서 패턴과 일치하는 문자의 빈도를 계산합니다.
- 디폴트값은 패턴이 없기에 각 요소에 있는 글자 길이를 모두 계산합니다.
str_count(string, pattern = "")
text <- c("꽃이 피고 새잎 나는 날",
"마음아 너도 거기서",
"꽃 피우고 새잎 내면서",
"놀고 있거라")
text_df <- tibble(
seq = 1:length(text),
text = text
)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_count("꽃")
## [1] 1 0 1 0
text %>%
str_count()
## [1] 13 10 12 6
text_df
## # A tibble: 4 x 2
## seq text
## <int> <chr>
## 1 1 꽃이 피고 새잎 나는 날
## 2 2 마음아 너도 거기서
## 3 3 꽃 피우고 새잎 내면서
## 4 4 놀고 있거라
text_df %>%
unnest_tokens(input = text, output = "word") %>%
filter(str_count(word, "꽃") >= 1)
## # A tibble: 2 x 2
## seq word
## <int> <chr>
## 1 1 꽃이
## 2 3 꽃
str_locate()
- 문자열에서 첫 번째 패턴이 어느 위치에서 시작해 어느 위치에서 끝나는 지 출력한다.
- 참고로 문자열의 공백 역시 1의 길이 값을 갖는 것으로 간주합니다.
str_locate(string, pattern)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_locate(pattern = "새잎")
## start end
## [1,] 7 8
## [2,] NA NA
## [3,] 7 8
## [4,] NA NA
추출 관련
str_sub()
- 문자벡터의 시작과 끝나는 지점의 값으로 문자열을 출력합니다.
- 시작과 끝나는 지점 값을 음수로 지정하면 역순으로 출력합니다.
str_sub(start, end)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_sub(start = 1, end = 5)
## [1] "꽃이 피고" "마음아 너" "꽃 피우고" "놀고 있거"
text %>%
str_sub(start = 1, end = -3)
## [1] "꽃이 피고 새잎 나는" "마음아 너도 거" "꽃 피우고 새잎 내"
## [4] "놀고 있"
str_subset()
- 문자열에서 패턴을 찾아 해당 패턴이 포함된 요소들을 산출합니다.
negate = TRUE
argument를 주면 해당 패턴이 없는 요소를 산출합니다.
str_subset(string, pattern, negate = FALSE)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_subset(pattern = "새잎")
## [1] "꽃이 피고 새잎 나는 날" "꽃 피우고 새잎 내면서"
text %>%
str_subset(pattern = "새잎", negate = TRUE)
## [1] "마음아 너도 거기서" "놀고 있거라"
str_extract()
- 문자열에서 일치하는 첫 번째 패턴을 찾아 벡터로 출력합니다.
- 문자열에서 추출 관련 함수들은 정규표현식을 패턴 파라미터에 섞어서 종종 쓰입니다.
str_extract(string, pattern)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_extract(pattern = "피고")
## [1] "피고" NA NA NA
str_match()
- 문자열에서 일치하는 패턴을 찾아 행렬로 출력합니다.
str_extract()
함수와 비슷하지만 출력하는 결과가 다릅니다.
str_match(string, pattern)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_match(pattern = "피고")
## [,1]
## [1,] "피고"
## [2,] NA
## [3,] NA
## [4,] NA
변환 관련
str_replace()
- 문자열에서 특정 패턴을 찾아 지정된 패턴으로 바꿔줍니다.
str_replace(string, pattern, replacement)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_replace(pattern = "피우고", replace = "피고")
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피고 새잎 내면서"
## [4] "놀고 있거라"
str_remove()
- 문자열에서 패턴을 찾아 해당 요소를 제거합니다.
str_remove(string, pattern)
text
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] "놀고 있거라"
text %>%
str_remove(pattern = "놀고")
## [1] "꽃이 피고 새잎 나는 날" "마음아 너도 거기서" "꽃 피우고 새잎 내면서"
## [4] " 있거라"
분리 관련
str_split()
- 문자열에서 패턴을 찾아 분리하여 리스트 형태로 출력합니다.
str_split(string, pattern)
text %>%
str_split(pattern = " ")
## [[1]]
## [1] "꽃이" "피고" "새잎" "나는" "날"
##
## [[2]]
## [1] "마음아" "너도" "거기서"
##
## [[3]]
## [1] "꽃" "피우고" "새잎" "내면서"
##
## [[4]]
## [1] "놀고" "있거라"
str_split_fixed()
함수도 있는데 이는 동일하게 분리하여 행렬 구조로 출력합니다.
str_split_fixed(string, pattern, n)
text %>%
str_split_fixed(pattern = " ", n = 5)
## [,1] [,2] [,3] [,4] [,5]
## [1,] "꽃이" "피고" "새잎" "나는" "날"
## [2,] "마음아" "너도" "거기서" "" ""
## [3,] "꽃" "피우고" "새잎" "내면서" ""
## [4,] "놀고" "있거라" "" "" ""
공백 처리 관련
str_squish()
- 문자열에서 모든 공백문자를 단일 스페이스로 취급합니다.
str_squish(string)
c(" 마스크 없는 일상으로 돌아가고 싶습니다")
## [1] " 마스크 없는 일상으로 돌아가고 싶습니다"
c(" 마스크 없는 일상으로 돌아가고 싶습니다 ") %>%
str_squish()
## [1] "마스크 없는 일상으로 돌아가고 싶습니다"
str_trim()
- 문자열에서 모든 종류의 공백을 단일 스페이스 공백으로 취급합니다만 양 끝에 있는 값들만 취급합니다.
side = c("both", "left", "right")
argument를 활용하여 끝을 지정할 수 있습니다.
str_trim(string, side)
c(" 마스크 없는 일상으로 돌아가고 싶습니다") %>%
str_trim(side = "left")
## [1] "마스크 없는 일상으로 돌아가고 싶습니다"
반응형
'tidytext' 카테고리의 다른 글
[R] unnest_tokens() (0) | 2021.07.17 |
---|---|
[R] 2. Sentiment analysis with tidy data (0) | 2021.07.17 |
[R] 정규표현식 관련 (0) | 2021.07.15 |
[R] 1. Tidy text format (0) | 2021.07.14 |
[R] 텍스트 데이터 분석을 위한 라이브러리 준비 (0) | 2021.07.14 |
TAGS.