본문 바로가기

배우기/복습노트[R과 분석]

[복습] R(programming language) 문자열 함수 정리하기 (2)

728x90
반응형

https://metime.tistory.com/105

 

[복습] R(programming language) 문자열 함수 정리하기 + 복습후기(20231122)

이 연습에서는 stringr 패키지를 사용하였다. install.packages('stringr') 로 패키지 설치 후 library(stringr)로 로드하였다. 문자열 함수에 본격적으로 들어가기 전에 중요 패키지 내부 함수 목록 보는 팁을

metime.tistory.com

어제 문자열 함수를 배우고 오늘 남은 것들을 배웠다.

 

1. 대소치환

str_to_lower()

str_to_upper()

str_to_title()

 

2. 문자열 추출

str_sub()

 

3. 치환

str_replace()

str_replace_all()

 

4. 문자열 결합

str_c()

 

5. 문자열 분리

str_split()

 

이렇게는 위의 링크에 정리되었고, 오늘 배운 것은 아래로 계속 작성하겠다.

 

6. 문자열 패턴

str_detect()

oracle에서 regexp_like와 유사하다.

특정 패턴을 포함하는지의 여부(T/F)가 리턴된다.

str_detect(string =  ,      # 대상

                 pattern =  )   # 정규식 표현 가능

 

예) a 또는 A로 시작하는

 

Line 4~ 6은 옳은 표현이다. 그러나 Line 8은 a로 시작하거나 A를 포함하는 으로 출력된다.

 

아래는 a 또는 A가 연속적으로 2회 포함된 코드이다.

LIne 5와 Line6은 구분이 잘 가지 않는데, 이건 replace를 하면 차이를 알 수 있다.

Line 8, 9의 결과를 출력하였다.

 

특수기호를 넣고 테스트를 한 결과이다.

 

 

연습문제를 풀어보자.

professor 데이터를 이용하여 ID 컬럼에 두 자 이상의 숫자가 연속 포함된 교수의 이름, ID를 출력하여라

 

professor ID 컬럼에서 특수기호를 모두 삭제하여라

 

professor ID 컬럼에서 p로 시작하고 n으로 끝나는 단어를 삭제하여라.

위와 같은 코드에서는 ^p를 하는 경우 중간에 p로 시작하는 단어가 있을 수도 있으니 햇 기호를 생략하라고 하셨다.

아래 두 차이를 비교해보면 알 것이다.

 

햇 기호(^)에 따라 결과가 달라지는 것을 알 수 있다.

 

 

 

7. 문자열 포함 횟수

str_count()

str_count(string =         # 대상

                pattern =   )  # 정규식 표현 가능

 

그냥 \\d를 찾으면 숫자 하나하나 개수를 세는데 \\d+ 하면 한 덩어리를 센다.

 

 

 

8. 문자열 삭제

str_remove() 하나를 지움

str_remove_all() 전체를 지움

str_remove(string =  ,    # 대상

                   pattern =  )  # 정규식 표현 가능

Line 1은 콤마 하나만 지우고 , Line 2는 모든 콤마를 삭제하였다.

 

 

 

9. 문자열 삽입

str_pad()

str_pad(string =  ,         # 대상

             width =  ,          # 총 자리수

             side =    ,          # 방향 (left, right, both)

             pad =' '   )         # 삽입문자, 한 칸의 공백이 Default이다.

 

예제를 하나 풀어보자.

data2.csv 파일에서 시간 컬럼의 값을 시작 시간으로 대체하여라

 

 

 

10. 공백삭제

str_trim()   (공백삭제용으로만 사용됨)

str_trim(string = ,      # 대상

              side =  )       # 삭제 방향(left, right, both)

 

 

728x90

 

 

 

11. 문자열 반복

str_dup()

지역번호 마스킹 처리를 할 때 국번이 세 자이거나 네 자일 때 이 국번들을  추출하여 개수만큼 x를 반복하고 싶을때, sql에서는 lpad('x'. 4. 'x') 로 처리했었다.

 

str_dup(string =   ,    # 대상

              times =  )     # 반복횟수

이런식으로 사용할 수 있다.

 

참고로 rep 라는 함수도 있는데, 이 함수도 반복을 시킨다.

그런데 rep는 대상이 벡터여서 벡터의 반복을 수행하고 str_dup는 문자열의 반복을 수행한다.

 

rep(x,                # 대상(벡터)

          ....)          # each, times

 

rep의 예시이다.

 

 

 

12. 문자열의 위치

str_locate()

str_locate_all()

 

str_locate(string =   ,         # 대상

                 pattern =     )     # 정규식 표현 전달 가능

 

Line 1의 경우 최초로 발견된 값 하나만 리턴된다. 즉 처음 발견된 패턴의 위치를 추출한다.

Line 2는 모든 위치의 값을 리턴한다

start와 end가 나온 이유는 발견하고자 하는 문자가 덩어리 일 수도 있기 때문이다.

Line 4를 보면 시작위치와 끝 위치가 다르게 추출되는 것을 볼 수 있다.

 

데이터마다 시작값과 끝 값을 알려주어야 한다. 그래서 두 개의 컬럼이 필요하다. 그러나 리스트는 두 개의 컬럼을 보여줄 수 없다. 

위와 같은 경우 더이상 리스트가 될 수 없다. 이제는 값이 밑으로 내려가며 쌓이고 start와 end가 진행되어야 하므로 2차원이다. 즉 행렬(matrix)이다. 행렬로 추출되는 이유는 숫자로만 구성된 값이기 때문이다.

이 같은 경우 리스트 안에 메트릭스가 있다. 

 

이렇게 메트릭스를 유지하면서 층(key)를 유지하고 있다.

 

문제를 하나 풀어보자

professor.csv 파일의 ID에서 숫자 하나의 위치를 각 원소마다 출력하여라.

이건 Line 2의 추출 결과이고, 행렬이 추출되었다.

 

이건 Line 3의 추출결과이고 리스트가 추출되었다(리스트 안에 메트릭스)

 

어쩔 수 없이 자료 구조가 이렇게밖에 선택이 되지 않는다.

그냥 이렇다고 이해하면 된다.

 

 

데이터 프레임은 key 별로 데이터 개수가 같다. 행 자체로도 의미가 있다.

리스트는 공통 속성으로 여러 개를 모아둔 것이다.

[[1]] 층 또는 key라고 부르며 속성이라고도 한다. 데이터를 정리할 목적을 지나며, 이름이 없으면 그냥 층 번호로 불린다. 이름이 지어지면 [[이름]] 의 형태가 된다.

 

str_split의 출력 결과가 왜 리스트일까?

c('a|b', 'a|b|c') 가 있다 그대로 split 한다면 (a, b, a, b, c) 가 되며, 어느 원소가 어느 곳에서 나왔는지 구분하기 어려우므로 리스트로 저장하는 것이다.

[[1]]a, b  [[2]]a, b, c

 

 

 

13. 문자열의 길이

str_length()

length와의 차이점을 보자.

length는 벡터 원소의 수가 출력된다.

str_length는 벡터 원소 각각의 문자열 길이를 의미한다.

 

 

여기까지 문자열 함수를 마무리하겠다.

728x90
반응형