R의 문자열에서 모든 특수 문자를 제거 하시겠습니까?


117

R의 문자열에서 모든 특수 문자를 제거하고 공백으로 바꾸는 방법은 무엇입니까?

제거 할 일부 특수 문자는 다음과 같습니다. ~!@#$%^&*(){}_+:"<>?,./;'[]-=

나는 해봤 regex[:punct:]패턴하지만 그것은 단지 문장 부호를 제거합니다.

질문 2 : 그리고 다음과 같은 외국어에서 문자를 제거하는 방법 : â í ü Â á ą ę ś ć?

답변 : [^[:alnum:]]제거 ~!@#$%^&*(){}_+:"<>?,./;'[]-=에 사용 [^a-zA-Z0-9]하고 â í ü Â á ą ę ś ć, regex또는 regexpr기능 을 제거 하는 데 사용 합니다.


4
"특수 문자"의 정의는 무엇입니까?
kohske 2012

내 자신의 정의는 유니 코드가 아닌 모든 문자입니다 ;-). 그러나 나는 다른 많은 사람들이 동의하지 않을 것이라고 생각합니다.
Joey

sub또는 gsub기능을 살펴보십시오 .
Paul Hiemstra 2012

5
정규식 [: PUNCT :]는 모든 작업의 절반을 만들거나 mayby 것
Qbik

답변:


197

원하지 않는 문자를 식별 하려면 정규식 을 사용해야 합니다. 가장 쉽게 읽을 수있는 코드의 경우 기본 R에서도 작동 하지만 패키지 str_replace_all에서 를 원합니다 .stringrgsub

정확한 정규식은 수행하려는 작업에 따라 다릅니다. 질문에서 제공 한 특정 문자를 제거 할 수 있지만 모든 구두점 문자를 제거하는 것이 훨씬 쉽습니다.

x <- "a1~!@#$%^&*(){}_+:\"<>?,./;'[]-=" #or whatever
str_replace_all(x, "[[:punct:]]", " ")

(기본 R에 해당하는 값은 gsub("[[:punct:]]", " ", x)입니다.)

대안은 영숫자가 아닌 모든 문자를 교체하는 것입니다.

str_replace_all(x, "[^[:alnum:]]", " ")

문자, 숫자 또는 문장 부호를 구성하는 정의는 로케일에 따라 약간 씩 다르므로 원하는 것을 정확히 얻기 ​​위해 약간의 실험이 필요할 수 있습니다.


11
당신은 대체 할 수 있습니다 좋은 답변 +1 " "과는 ""달리 당신은 문자열의 빈 공백이있다.
Tyler Rinker 2012

8
@TylerRinker : 사실이지만 QBik은 특별히 공백을 요청했습니다.
Richie Cotton

8
그 미친 캐릭터를 삭제하는 방법 : â í ü Â á?
Qbik 2012

1
정규 표현식을 읽어야합니다. 내 대답에있는 링크를 시작하고 읽기 ?regex?regexpr.
Richie Cotton

1
교체 시도 [^[:alnum:]]와 함께 [^a-zA-Z0-9]또는 가능 \\W.
Richie Cotton

27

정규식을 사용하여 "미친"문자를 제거하는 대신 ASCII로 변환하면 악센트가 제거되지만 문자는 유지됩니다.

astr <- "Ábcdêãçoàúü"
iconv(astr, from = 'UTF-8', to = 'ASCII//TRANSLIT')

결과적으로

[1] "Abcdeacoauu"

나는 추가했다 iconv(astr, from="UFT-8", to="ASCII//TRANSLIT")처럼 프랑스어 문자로, 그렇지 않으면, ç그것은 재미 조금 간다.
Duccio A

8

특수 문자를 아포스트로피로 변환하고,

Data  <- gsub("[^0-9A-Za-z///' ]","'" , Data ,ignore.case = TRUE)

아래 코드는 추가 '' '아포스트로피를 제거합니다.

Data <- gsub("''","" , Data ,ignore.case = TRUE)

gsub(..)특수 문자를 아포스트로피로 바꾸는 기능 사용

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.