R/R basic

데이터 문자값 바꾸기 (sub, gsub 함수)

시키테이 2021. 5. 4. 10:58
반응형

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)

 

 

 

 

 

 

 

 

반응형