Jak usunąć wszystkie znaki specjalne z ciągu w R i zastąpić je spacjami?
Niektóre znaki specjalne do usunięcia to: ~!@#$%^&*(){}_+:"<>?,./;'[]-=
Próbowałem regex
z [:punct:]
wzorem, ale usuwa tylko znaki interpunkcyjne.
Pytanie 2: A jak usunąć znaki z języków obcych, takie jak â í ü Â á ą ę ś ć
:?
Odpowiedź: Użyj, [^[:alnum:]]
aby usunąć ~!@#$%^&*(){}_+:"<>?,./;'[]-=
i użyj, [^a-zA-Z0-9]
aby usunąć także â í ü Â á ą ę ś ć
w regex
lub regexpr
funkcje.
sub
lubgsub
funkcje.Odpowiedzi:
Aby zidentyfikować niechciane znaki, musisz użyć wyrażeń regularnych . Aby uzyskać najłatwiejszy do odczytania kod, potrzebujesz kodu
str_replace_all
zstringr
pakietu, chociażgsub
z podstawowego 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 określone znaki, które podałeś w pytaniu, ale znacznie łatwiej jest usunąć wszystkie znaki interpunkcyjne.
(Podstawowy odpowiednik R to
gsub("[[:punct:]]", " ", x)
.)Alternatywą jest zamiana wszystkich znaków niealfanumerycznych.
Zwróć uwagę, że definicja tego, co stanowi literę, cyfrę lub znak interpunkcyjny, różni się nieznacznie w zależności od Twojego regionu, więc może być konieczne trochę poeksperymentowania, aby uzyskać dokładnie to, czego chcesz.
źródło
" "
w""
przeciwnym razie masz puste miejsce w ciągu.â í ü Â á
??regex
i?regexpr
.[^[:alnum:]]
go[^a-zA-Z0-9]
lub ewentualnie\\W
.Zamiast używać wyrażeń regularnych do usuwania tych „szalonych” znaków, po prostu przekonwertuj je na ASCII, co usunie akcenty, ale zachowa litery.
Co skutkuje w
źródło
iconv(astr, from="UFT-8", to="ASCII//TRANSLIT")
, inaczej z francuskimi postaciami wyglądaç
to trochę zabawnie.Zamień znaki specjalne na apostrof,
Poniżej zakoduj go, aby usunąć dodatkowy apostrof '' '
Użyj
gsub(..)
funkcji do zastąpienia znaku specjalnego apostrofemźródło