Hapus semua karakter khusus dari string di R?

118

Bagaimana cara menghapus semua karakter khusus dari string di R dan menggantinya dengan spasi?

Beberapa karakter khusus untuk dihapus adalah: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

Saya sudah mencoba regexdengan [:punct:]pola tetapi hanya menghapus tanda baca.

Pertanyaan 2: Dan bagaimana cara menghapus karakter dari bahasa asing seperti â í ü Â á ą ę ś ć:?

Jawaban: Gunakan [^[:alnum:]]untuk menghapus ~!@#$%^&*(){}_+:"<>?,./;'[]-=dan menggunakan [^a-zA-Z0-9]untuk menghapus juga â í ü Â á ą ę ś ćdi regexatau regexprfungsi.

Qbik
sumber
4
Apa definisi dari "karakter khusus"?
kohske
Definisi saya sendiri adalah setiap karakter yang tidak ada di Unicode ;-). Tapi saya rasa banyak orang tidak setuju.
Joey
Mungkin lihat subatau gsubfungsinya.
Paul Hiemstra
5
regex [: punct:] akan membuat setengah dari pekerjaan atau mayby ​​semua
Qbik

Jawaban:

197

Anda perlu menggunakan ekspresi reguler untuk mengidentifikasi karakter yang tidak diinginkan. Untuk kode yang paling mudah dibaca, Anda menginginkan str_replace_alldari stringrpaket, meskipun gsubdari basis R juga berfungsi dengan baik.

Persamaan reguler yang tepat bergantung pada apa yang Anda coba lakukan. Anda bisa saja menghapus karakter spesifik yang Anda berikan dalam pertanyaan, tetapi jauh lebih mudah untuk menghapus semua karakter tanda baca.

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

(Setara basis R adalah gsub("[[:punct:]]", " ", x).)

Alternatifnya adalah menukar semua karakter non-alfanumerik.

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

Perhatikan bahwa definisi tentang huruf atau angka atau tanda baca sedikit berbeda-beda tergantung pada tempat Anda, jadi Anda mungkin perlu sedikit bereksperimen untuk mendapatkan apa yang Anda inginkan.

Richie Cotton
sumber
11
jawaban bagus +1 Anda mungkin ingin mengganti " "dengan ""jika tidak, Anda memiliki ruang kosong kosong di string.
Tyler Rinker
8
@TylerRinker: Benar, meskipun QBik secara khusus meminta spasi.
Richie Cotton
8
Cara menghapus remowe karakter-karakter gila: â í ü Â á?
Qbik
1
Anda perlu membaca tentang ekspresi reguler. Mulailah dengan tautan dalam jawaban saya, lalu baca ?regexdan ?regexpr.
Richie Cotton
1
Coba ganti [^[:alnum:]]dengan [^a-zA-Z0-9]atau mungkin \\W.
Richie Cotton
28

Alih-alih menggunakan regex untuk menghapus karakter "gila" tersebut, cukup ubah menjadi ASCII, yang akan menghapus aksen, tetapi akan mempertahankan hurufnya.

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

yang mengakibatkan

[1] "Abcdeacoauu"
Felipe Alvarenga
sumber
Saya harus menambahkan iconv(astr, from="UFT-8", to="ASCII//TRANSLIT"), jika tidak dengan karakter Prancis sepertinya çakan sedikit lucu.
Duccio A
8

Ubah karakter Khusus menjadi apostrof,

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

Di bawah kode itu untuk menghapus tanda kutip ekstra '' '

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

Gunakan gsub(..)fungsi untuk mengganti karakter khusus dengan apostrof

UMESH NITNAWARE
sumber