[R] 문자열 분리, 공백 제외 문자 카운트 하기 (feat. stringr)

해당 포스트에서는 R에서 문자열을 병합하고 공백을 제외한 문자들의 개수를 카운트하는 방법을 소개합니다.

R에서 문자열 분리, 문자 카운트하기
▲ 문자열 분리, 문자 카운트하기

1. INTRO

네이버 지식iN에서 지식을 공유하고 있습니다. 간단한 질문들은 해당 질문에 바로 답변을 드리지만 질문의 내용이 유익하거나 추가 설명이 필요한 경우에는 포스팅을 작성하여 공유드리고 있습니다.

2. 질문

네이버 지식인 질문
▲ 네이버 지식인 질문

네이버 지식인 질문 상세
▲ 네이버 지식인 질문(상세)

3. 풀이

이번 문제는 R에서 텍스트 처리 함수를 이용해 문자열을 분리하고 문자의 수를 카운트하는 문제로 상세는 아래와 같습니다.

  1. 주어진 z의 값을 앞에서 배운 함수들을 이용해 아래와 같이 나누어 보시오.
    • 앞에서 배운 함수 : stringr
  2. 위 결과값을 기준으로 공백을 제외한 모든 문자의 수는 얼마인지 계산해 보시오.

3.1 데이터 생성

먼저 문제에서 주어진 문자열 데이터를 생성하겠습니다.

library(stringr)

z <- c("i have two brothers","one is older and the other is younger")
z
[1] "i have two brothers"                   "one is older and the other is younger"

3.2 문자열 분리

문자열 데이터를 문자 단위로 분리하기 위해 먼저 하나의 문자열로 만들어 주겠습니다. collapse= 은 연결 구분자를 지정하는 옵션으로 이번 풀이에서는 공백(space)로 적용하였습니다.

z1 <- str_c(z, collapse = " ")
z1
[1] "i have two brothers one is older and the other is younger"

두 개의 문자열이 하나의 문자열로 잘 변환된 것을 확인하였습니다. 이번에는 문자열 분리를 위해 str_split() 함수를 적용해 보겠습니다. pattern=은 문자열을 분리하는 구분자를 의미하며 문자 단위로 구분할 때에는 ""로 지정해 주면 됩니다.

z2 <- str_split(str_c(z1, collapse = " "), pattern = "")
z2
[[1]]
[1] "i" " " "h" "a" "v" "e" " " "t" "w" "o" " " "b" "r" "o" "t" "h" "e" "r" "s" " " "o" "n" "e" " " "i" "s" " " "o" "l" "d" "e" "r" " " "a"
[35] "n" "d" " " "t" "h" "e" " " "o" "t" "h" "e" "r" " " "i" "s" " " "y" "o" "u" "n" "g" "e" "r"

위 결과를 보면, 문자열을 정상적으로 분리가 된 것 같은데 [[1]]을 보니 리스트(list) 형태로 출력이 된 것으로 보입니다. 이후 처리의 편리성을 위해 리스트(list)를 풀어 벡터(vector)형으로 변경해 보겠습니다.

z3 <- unlist(str_split(str_c(z1, collapse = " "), pattern = ""))
z3
[1] "i" " " "h" "a" "v" "e" " " "t" "w" "o" " " "b" "r" "o" "t" "h" "e" "r" "s" " " "o" "n" "e" " " "i" "s" " " "o" "l" "d" "e" "r" " " "a"
[35] "n" "d" " " "t" "h" "e" " " "o" "t" "h" "e" "r" " " "i" "s" " " "y" "o" "u" "n" "g" "e" "r"

드디어 문제에서 제시하였던 출력과 동일한 결과를 얻었습니다. 이제 공백을 제외한 모든 문자의 수를 계산해 보겠습니다.

3.3 공백 제외 문자 개수 카운트

R에서 벡터(vector)의 길이(개수)를 카운트 하는 함수는 length()입니다. 이 함수를 이용하여 마지막에 생성된 z3의 문자 개수를 카운트해보니 총 57 개로 확인되었습니다. 이 숫자는 공백(space)를 포함한 숫자이므로 간단한 조건값을 이용하여 공백을 제외시켜 보겠습니다.

length(z3)
[1] 57

벡터(vector)에 내부 조건을 적용하는 방법은 대괄호([ ])안에 조건을 입력해 주면 됩니다. 풀이에서 필요한 조건은 공백을 제외하는 것이므로 z3 변수의 값이 공백(" ")과 같지 않은(!=) 값들을 출력하도록 아래와 같이 입력하시면 됩니다.

z4 <- z3[z3 != " "]
z4
[1] "i" "h" "a" "v" "e" "t" "w" "o" "b" "r" "o" "t" "h" "e" "r" "s" "o" "n" "e" "i" "s" "o" "l" "d" "e" "r" "a" "n" "d" "t" "h" "e" "o" "t"
[35] "h" "e" "r" "i" "s" "y" "o" "u" "n" "g" "e" "r"

z4 변수의 출력값을 보면 공백(space) 데이터들이 잘 제거된 것을 볼 수 있습니다. 이제 마지막으로 length() 함수를 이용해 z4 변수의 길이(개수)를 카운트해 보면, 총 46개의 문자가 있는 것을 확인할 수 있습니다.

length(z4)
[1] 46

4. 마무리

이번 포스트에서는 R에서 문자열을 병합하고 공백을 제외한 문자들의 개수를 카운트하는 방법을 설명하였습니다. 이번에 소개한 내용은 텍스트 처리의 기본으로 이후 다양한 추가 분석으로 이어지게 되니 다양한 예제(한글, 특수기호 등)를 연습해 보시는 걸 추천드립니다.

추가 확인 : 문자들이 몇 개씩 있을까?

table(z4)
z4
a b d e g h i l n o r s t u v w y 
2 1 2 7 1 4 3 1 3 6 5 3 4 1 1 1 1 

5. 관련 링크

[1] [R] 두 개의 텍스트 파일 비교 분석 (feat. tidyverse)


banner-request-analysis