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]
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.
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"
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
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