ลบอักขระพิเศษทั้งหมดออกจากสตริงใน R?


119

จะลบอักขระพิเศษทั้งหมดออกจากสตริงใน R และแทนที่ด้วยช่องว่างได้อย่างไร

อักขระพิเศษที่จะลบ ได้แก่ : ~!@#$%^&*(){}_+:"<>?,./;'[]-=

ฉันได้ลองregexใช้[:punct:]รูปแบบแล้ว แต่ลบเฉพาะเครื่องหมายวรรคตอน

คำถามที่ 2: และวิธีลบอักขระจากภาษาต่างประเทศเช่น: â í ü Â á ą ę ś ć?

คำตอบ: ใช้[^[:alnum:]]ลบ~!@#$%^&*(){}_+:"<>?,./;'[]-=และใช้[^a-zA-Z0-9]เพื่อลบนอกจากนี้â í ü Â á ą ę ś ćในregexหรือregexprฟังก์ชัน


4
คำจำกัดความของ "อักขระพิเศษ" คืออะไร?
kohske

คำจำกัดความของฉันจะเป็นอักขระทุกตัวที่ไม่ได้อยู่ใน Unicode ;-) แต่ฉันเดาว่าหลาย ๆ คนคงไม่เห็นด้วย
Joey

อาจจะดูsubหรือgsubฟังก์ชั่น
Paul Hiemstra

5
regex [: punct:] จะทำครึ่งหนึ่งของงานหรืออาจจะทั้งหมด
Qbik

คำตอบ:


197

คุณต้องใช้นิพจน์ทั่วไปเพื่อระบุอักขระที่ไม่ต้องการ สำหรับรหัสที่อ่านได้ง่ายที่สุดคุณต้องการstr_replace_allจากstringrแพ็คเกจแม้ว่าgsubจากฐาน R จะทำงานได้ดีเช่นกัน

นิพจน์ทั่วไปที่แน่นอนขึ้นอยู่กับสิ่งที่คุณกำลังพยายามทำ คุณสามารถลบอักขระเฉพาะที่คุณระบุไว้ในคำถามได้ แต่การลบเครื่องหมายวรรคตอนทั้งหมดทำได้ง่ายกว่ามาก

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

(ฐาน R เทียบเท่าgsub("[[:punct:]]", " ", x))

อีกทางเลือกหนึ่งคือการสลับอักขระที่ไม่ใช่ตัวเลขและตัวอักษรทั้งหมด

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

โปรดทราบว่าคำจำกัดความของสิ่งที่ประกอบด้วยตัวอักษรหรือตัวเลขหรือเครื่องหมายวรรคตอนจะแตกต่างกันเล็กน้อยขึ้นอยู่กับสถานที่ของคุณดังนั้นคุณอาจต้องทดลองเล็กน้อยเพื่อให้ได้สิ่งที่คุณต้องการ


11
คำตอบที่ดี +1 คุณอาจต้องการแทนที่" "ด้วย""มิฉะนั้นคุณจะมีพื้นที่ว่างในสตริง
Tyler Rinker

8
@TylerRinker: จริงอยู่แม้ว่า QBik จะขอช่องว่างโดยเฉพาะ
Richie Cotton

8
วิธีลบ remowe เหล่าตัวละครบ้า: â í ü Â á?
Qbik

1
คุณต้องอ่านนิพจน์ทั่วไป เริ่มต้นด้วยการเชื่อมโยงในคำตอบของฉันแล้วอ่านและ?regex ?regexpr
Richie Cotton

1
ลองแทนที่[^[:alnum:]]ด้วย[^a-zA-Z0-9]หรืออาจเป็นไป\\Wได้
Richie Cotton

28

แทนที่จะใช้ regex เพื่อลบอักขระที่ "บ้า" ออกเพียงแค่แปลงเป็น 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.