Usunąć wszystkie znaki specjalne z ciągu znaków w R?

Jak usunąć wszystkie znaki specjalne w danym łańcuchu w R i zastąpić każdy znak specjalny spacją ?

Znaki specjalne do usunięcia To: ~!@#$%^&*(){}_+:"<>?,./;'[]-=

regex [:punct:] zrobi połowę roboty.

Pytanie_2: ale jak usunąć np. te znaki z języków obcych: â í ü Â á ą ę ś ć ?

Answer_2: Zamień [^[:alnum:]] na [^a-zA-Z0-9] w regex lub regexpr:
regex[^a-zA-Z0-9]

Author: Qbik, 2012-04-24

3 answers

Musisz użyć wyrażeń regularnych aby zidentyfikować niechciane znaki. Dla najłatwiej czytelnego kodu, chcesz str_replace_all z stringr pakiet, choć gsub z bazy r działa równie dobrze.

Dokładne wyrażenie regularne zależy od tego, co próbujesz zrobić. Możesz po prostu usunąć te konkretne znaki, które podałeś w pytaniu, ale o wiele łatwiej jest usunąć wszystkie znaki interpunkcyjne.

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

(baza R odpowiednikiem jest gsub("[[:punct:]]", " ", x).)

Alternatywą jest zamiana wszystkich znaków niealfanumerycznych.

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

Zauważ, że definicja tego, co składa się na literę, liczbę lub znak interpunkcyjny, różni się nieznacznie w zależności od lokalizacji, więc być może będziesz musiał trochę poeksperymentować, aby uzyskać dokładnie to, czego chcesz.

 130
Author: Richie Cotton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-03 06:38:47

Zamiast używać regex do usuwania tych "szalonych" znaków, po prostu przekonwertuj je do ASCII, co usunie akcenty, ale zachowa litery.

EDIT: jak pamiętamy w komentarzach, może być konieczne zadeklarowanie początkowego kodowania oryginalnego ciągu znaków, zwykle będzie to UTF-8

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

Co daje

[1] "Abcdeacoauu"
 12
Author: Felipe Alvarenga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-17 14:32:23

Konwertuj znaki specjalne na apostrof,

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

Poniżej Zakoduj go, aby usunąć dodatkowy apostrof "'

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

Użyj funkcji gsub(..) do zastąpienia znaku specjalnego apostrofem

 0
Author: UMESH NITNAWARE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 07:58:10