Porównaj ceny domen i usług IT, sprzedawców z całego świata

Konwertuj miesiące MMM na liczbowe


Otrzymałem plik CSV z kolumną o nazwie miesiąc jako zmienną typu char z pierwszymi trzema literami miesiąca. Np .:
"Jan", "Feb","Mar",..."Dec"

Czy istnieje sposób, aby przekonwertować to na liczbową reprezentację miesiąca, od 1 do 12, a nawet na typ w formacie daty?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Użyj
match
i predefiniowanego wektora
month.abb
:
tst <- c("Jan","Mar","Dec")
match(tst,month.abb)
[1] 1 3 12
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć wbudowanego wektora
month.abb
, aby sprawdzić podczas konwersji na liczbę, na przykład:
mm <- c("Jan","Dec","jan","Mar","Apr")sapply(mm,function(x) grep(paste("(?i)",x,sep=""),month.abb))
Jan Dec jan Mar Apr
1 12 1 3 4

Konstrukcja grep rozwiązuje różnice w kapitalizacji. Jeśli tego nie potrzebujesz,
match(mm,month.abb)

działa równie dobrze.
Jeśli masz również kolumnę dnia i roku, możesz użyć dowolnej funkcji przekształcania, używając odpowiednich kodów (zobacz także
? Strftime
)
dawny.
mm <- c("Jan","Dec","jan","Mar","Apr")
year <- c(1998,1998,1999,1999,1999)
day <- c(4,10,3,16,25)dates <- paste(year,mm,day,sep="-")strptime(dates,format="%Y-%b-%d")
[1] "1998-01-04" "1998-12-10" "1999-01-03" "1999-03-16" "1999-04-25"
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wystarczy dodać do istniejących odpowiedzi i komentarza w pytaniu:
readr::parse_date("20/DEZEMBRO/18","%d/%B/%y",locale=locale("pt"))

Format daty wyników to
„2018-12-20”
.
locale („pt”)
dla języka portugalskiego używanego w Brazylii może mieć
„es”
dla hiszpańskiego,
"fr"
dla francuskiego itd.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Kilka przypadków użycia:
vec <- c("Jan","Dec","Jan","Apr")


> Months <- 1:12
> names(Months) <- month.abb
> unname(Months[vec])
[1] 1 12 1 4

i/lub
> match(vec, month.abb)
[1] 1 12 1 4

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się