Jeg bruker pakken lubridate
og bruker funksjonen month
for å trekke ut måned fra dato. Jeg kjørte str-kommandoen på datofeltet og fikk følgende resultat
Factor w/ 9498 levels "01/01/1979","01/01/1980",..: 5305 1 1 1 1 1 1 1 1 1 ...
> v1$Date<-month(v1$Date)
Error in as.POSIXlt.character(as.character(x), ...) :
character string is not in a standard unambiguous format
Her er et eksempel på datarammen min
https://drive.google.com/file/d/0B6cqWmwsEk20Q2dHblhXZi14Wk0/edit?usp=sharing
Jeg vet ikke hva jeg gjør feil.
måned" angir:
Date-time må være en POSIXct, POSIXlt, Date, Period, chron, yearmon, yearqtr, zoo, zooreg, timeDate, xts, its, ti, jul, timeSeries og fts. objekter.
Objektet ditt er en faktor, ikke engang en tegnvektor (antagelig på grunn av stringsAsFactors = TRUE
). Du må konvertere vektoren til en datetime-klasse, for eksempel POSIXlt
:
library(lubridate)
some_date <- c("01/02/1979", "03/04/1980")
month(as.POSIXlt(some_date, format="%d/%m/%Y"))
[1] 2 4
Det finnes også en bekvemmelighetsfunksjon dmy
, som kan gjøre det samme (tips foreslått av @Henrik):
month(dmy(some_date))
[1] 2 4
@IShouldBuyABoat gir enda et hint om at dd/mm/ååååå tegnformater aksepteres uten eksplisitt casting:
month(some_date)
[1] 2 4
For en liste over formater, se ?strptime
. Der finner du at "standard unambiguous format" står for
Standardformatene følger reglene i den internasjonale standarden ISO 8601 standard som uttrykker en dag som "2001-02-28" og et klokkeslett som "2001-02-28". "14:01:02" med ledende nuller som her.
Uten behov for en ekstern pakke:
hvis datoen er i følgende format:
myDate = as.POSIXct("2013-01-01")
For å finne månedens nummer:
format(myDate,"%m")
Og for å hente månedsstrengen:
format(myDate,"%B")
kan du konvertere den til datoformat ved å
new_date<- as.Date(old_date, "%m/%d/%Y")}
fra new_date
, kan du få måneden ved hjelp av strftime()
.
month<- strftime(new_date, "%m")
.
old_date<- "01/01/1979"
new_date<- as.Date(old_date, "%m/%d/%Y")
new_date
#[1] "1979-01-01"
month<- strftime(new_date,"%m")
month
#[1] "01"
year<- strftime(new_date, "%Y")
year
#[1] "1979"