Chciałbym usunąć określone znaki z ciągów w wektorze, podobnie jak Znajdź i zamień w programie Excel.
Oto dane, od których zaczynam:
group <- data.frame(c("12357e", "12575e", "197e18", "e18947")
Zaczynam od pierwszej kolumny; Chcę utworzyć drugą kolumnę, usuwając e
:
group group.no.e
12357e 12357
12575e 12575
197e18 19718
e18947 18947
fixed = TRUE
przyspieszy to.fixed=TRUE
uniemożliwia R używanie wyrażeń regularnych, które pozwalają na bardziej elastyczne dopasowanie wzorca, ale wymagają czasu na obliczenie. Jeśli wszystko, co jest potrzebne, to usunięcie pojedynczego stałego ciągu „e”, nie są one konieczne.sub("e", "", group)
miałby ten sam wynik?e
znalezione w każdym elemencieWyrażenia regularne to twoi przyjaciele:
Teraz użyj
gsub()
najprostszego możliwego wzoru zastępczego: pusty ciąg:źródło
require(stringr);group$groupNoE <- str_replace(group$group, "e", "")
str_replace
zawijasub
, więc zastąpi tylko pierwsze wystąpienie wzorca. Musisz użyć,str_replace_all
jeśli chcesz mieć takie samo zachowanie jakgsub
.Podsumowując 2 sposoby zamiany ciągów:
1) Użyj
gsub
2) Użyj
stringr
paczkiOba wytworzą pożądany wynik:
źródło
Nie musisz tworzyć ramki danych z wektora ciągów, jeśli chcesz zamienić w niej niektóre znaki. Wyrażenia regularne to dobry wybór, ponieważ zostały już wspomniane przez @Andrie i @Dirk Eddelbuettel.
Zwróć uwagę, jeśli chcesz zastąpić znaki specjalne, takie jak kropki, powinieneś zastosować pełną składnię wyrażeń regularnych, jak pokazano w przykładzie poniżej:
to wytworzy
źródło
gsub("\\.", " ", ctr_names)
Użyj pakietu stringi :
źródło
źródło