R로 작업을 하다보면 데이터를 바꾸고 싶을 때가 가끔 생기는데, 특히 문자(character)를 바꿔야 할 때가 종종 있습니다. 이 때 쓰이는 대표적인 함수가 sub 혹은 gsub 함수인데요. sub은 맨 처음 나오는 문자만 바꾸지만, 일괄적으로 특정 문자를 모조리 바꿔라할 때는 gsub이 많이 사용됩니다. 데이터를 다루다보면 gsub을 훨씬 더 많이 씁니다. gsub의 기본 조건은 다음과 같습니다.
gsub('바꿔야 할 문자', '새롭게 대체할 문자', 범위 (데이터프레임 전체든, 일부 칼럼이든, 벡터이든))
예를 하나 들어보죠. 데이터를 열었는데 2012, 2013, 2014... 등으로 표기되어야 할 year column에 이상하게 X2012, X2013, X2014 이런 식으로 X가 불필요하게 들어가 있는 겁니다. 제가 하고 싶은 것은 X를 제거하고 현재 문자열로 인식될 year 칼럼을 숫자 형태로 변환하는 것입니다. 이 경우에는 X를 그냥 빈칸으로 없애버려 하고 (아 여기서 데이터프레임 이름은 merged입니다),
gsub('X', '', merged$year)
이렇게 적어도 됩니다. 그런데 만약에 X2012, X2013, 이런 식이 아니라 막 이상한 문자가 랜덤하게 막들어가 있으면 어떨까요 예를 들어 X2012, AB2013, 이런 식으로.
이렇게 문자로 된 것 다 빈칸으로 바꿔버려 할 때 자주 쓰이는 조건이 [a-zA-Z]입니다. 문자로 된 거 빈칸으로 다 바꿔버린 다음에 year 칼럼을 아예 숫자 속성의 칼럼으로 바꿔버려 하면, 아래처럼 하면 됩니다.
merged$year <- as.integer(gsub('[a-zA-Z]', '', merged$year))
만약 모든 숫자를 다 없애버려 라고 한다면, '[0-9]*'을 쓰면 됩니다.
gsub('[0-9]', '', merged$year)
그리고 문자열 앞칸에 일괄적으로 Mr./Mrs.라는 단어를 추가시켜 하면 (이번에는 df라는 데이터프레임의 Speaker라는 칼럼을 바꾼다고 가정. 아래처럼 하면 됩니다. 그밖에 gsub의 기능이 많으니 검색해보시면 더 많은 결과를 얻으실 겁니다.
gsub('.*^','Mr/Mrs.',df$Speaker)
'R > R basic' 카테고리의 다른 글
날짜 데이터 읽기 (2): 두 개 이상 날짜 칼럼 합쳐서 변환 (with, sprintf) (0) | 2021.05.25 |
---|---|
날짜 데이터 읽기 (1): 문자를 날짜로 데이터 변환 (as.Date) (0) | 2021.05.23 |
%>%란 무엇인가 (dplyr) (0) | 2021.04.30 |
3개 이상의 데이터프레임을 한 번에 합치기 (join 함수) (0) | 2021.04.26 |
두 개의 데이터프레임 합치기 (join 함수) (0) | 2021.04.23 |