2012-04-24 129 views
59

Làm thế nào để loại bỏ tất cả các ký tự đặc biệt trong một chuỗi đã cho trong R và thay thế mỗi ký tự đặc biệt bằng dấu cách?Xóa tất cả các ký tự đặc biệt khỏi chuỗi trong R?

Các ký tự đặc biệt để loại bỏ là: [email protected]#$%^&*(){}_+:"<>?,./;'[]-=

regex [:punct:] sẽ làm cho một nửa của công việc.

Câu hỏi_2: Nhưng cách xóa ví dụ: các ký tự này từ tiếng nước ngoài: â í ü Â á ą ę ś ć?

ANSWER_2: Thay thế [^[:alnum:]] với [^a-zA-Z0-9] trong regex hoặc regexpr:
regex[^a-zA-Z0-9]

+4

Định nghĩa "ký tự đặc biệt" là gì? – kohske

+0

Định nghĩa riêng của tôi sẽ là mọi ký tự không có trong Unicode ;-). Nhưng tôi đoán nhiều người khác sẽ không đồng ý. – Joey

+0

Có thể xem các hàm 'sub' hoặc' gsub'. –

Trả lời

116

Bạn cần phải sử dụng regular expressions để xác định các ký tự không mong muốn. Đối với mã dễ đọc nhất, bạn muốn có str_replace_all từ gói stringr, mặc dù gsub từ cơ sở R cũng hoạt động.

Cụm từ thông dụng chính xác phụ thuộc vào những gì bạn đang cố gắng thực hiện. Bạn có thể chỉ cần loại bỏ những ký tự cụ thể mà bạn đã đưa ra trong câu hỏi, nhưng nó dễ dàng hơn nhiều để loại bỏ tất cả các ký tự dấu chấm câu.

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

(Các cơ sở R tương đương là gsub("[[:punct:]]", " ", x).)

Một cách khác là để trao đổi trên tất cả các ký tự không tự chữ và số.

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

Lưu ý rằng định nghĩa thế nào là một lá thư hoặc một số hoặc một dấu punctuatution thay đổi một chút tùy thuộc vào miền địa phương của bạn, vì vậy bạn có thể cần phải thử nghiệm một chút để có được chính xác những gì bạn muốn.

+6

+1 Bạn có thể muốn thay thế '" "' bằng '" "' nếu không bạn có khoảng trắng trống trong chuỗi. –

+4

@TylerRinker: Đúng, mặc dù QBik đã yêu cầu cụ thể về không gian. –

+2

cuộc gọi tốt, bỏ lỡ điều đó. –

4

Thay vì sử dụng regex để xóa các ký tự "điên" này, chỉ cần chuyển đổi chúng sang ASCII, sẽ xóa dấu trọng âm, bu giữ các chữ cái.

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

mà kết quả trong

[1] "Abcdeacoauu" 
0

Chuyển đổi các ký tự đặc biệt để apostrophe,

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

Dưới mã nó để loại bỏ thêm ''' dấu nháy đơn

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

Sử dụng gsub(..) chức năng để thay thế ký tự đặc biệt bằng dấu nháy đơn

Các vấn đề liên quan