Jestem bardzo nowy w R i nie mogłem znaleźć prostego przykładu online, jak usunąć ostatnie n znaków z każdego elementu wektora (tablicy?)
Pochodzę z języka Java, więc chciałbym zrobić iterację po każdym elemencie a$data
i usunąć ostatnie 3 znaki z każdego elementu.
Jak byś się do tego zabrał?
-3
aby-0
uzyskać pożądany efekt! Mam dużo danych z datami, np .:"2014-03-27 23:00:00 GMT" "2014-03-31 00:00:00 BST"
- tak, dwie strefy czasowe razem, a funkcja as.Date zwraca nieoczekiwane wyniki (dzień wcześniej dla dat BST) - dlatego chciałem usunąć znacznik strefy czasowej, okazuje się, że muszę zrobić-0
i znika wraz z godzinamistrptime
).Oto sposób na
gsub
:źródło
gsub('.{5}$', '', 'abcd')
.Chociaż jest to w większości to samo z odpowiedzią @nfmcclure, wolę używać
stringr
pakietu, ponieważ zapewnia zestaw funkcji, których nazwy są najbardziej spójne i opisowe niż te w podstawowym R (w rzeczywistości zawsze wyszukuję w wyszukiwarce „jak uzyskać liczbę znaki w R ”, bo nazwy nie pamiętamnchar()
).Spowoduje to usunięcie ostatnich 3 znaków z każdej wartości w
Species
kolumnie.źródło
stringr
pakietem jest jeszcze prostsze rozwiązanie:str_sub(iris$Species, end=-4)
To samo można osiągnąć z pakietem stringi :
źródło
Podobne do @Matthew_Plourde using
gsub
Jednak używając wzorca, który obetnie do zera znaków, tj. Zwróci „”, jeśli oryginalny ciąg jest krótszy niż liczba znaków do wycięcia:
Różnica polega na tym, że
{0,3}
kwantyfikator wskazuje od 0 do 3 dopasowań, podczas gdy{3}
wymaga dokładnie 3 dopasowań, w przeciwnym razie żadne dopasowanie nie zostanie znalezione, w takim przypadkugsub
zwraca oryginalny, niezmodyfikowany ciąg.Uwaga: użycie
{,3}
byłoby równoważne{0,3}
, po prostu wolę ten drugi zapis.Więcej informacji na temat kwantyfikatorów wyrażeń regularnych można znaleźć tutaj: https://www.regular-expressions.info/refrepeat.html
źródło
sub()
zamiastgsub()
.