¿Cómo puedo eliminar los primeros elementos de una variable, especialmente si esta variable tiene caracteres especiales? Por ejemplo, tengo la siguiente columna:
Date
01/01/2009
01/01/2010
01/01/2011
01/01/2012
Necesito tener una nueva columna como la siguiente:
Date
2009
2010
2011
2012
format
para extraer el 'año'gsub(".*/","",df$Date)
substr(as.character(....), 7, 10)
lubridate::year
también debería hacer el truco una vez que los datos estén en formato 'Fecha' como lo sugiere @akrun.Date
y usar unaformat
u otras funciones para extraer partes de ella. Por ejemplox <- as.Date("01/01/2009", format = "%m/%d/%Y"); lubridate::year(x)
,.Respuestas:
si todas sus fechas tienen el mismo ancho, puede poner las fechas en un vector y usar la subcadena
Date a <- c("01/01/2009", "01/01/2010" , "01/01/2011") substring(a,7,10) #This takes string and only keeps the characters beginning in position 7 to position 10
salida
[1] "2009" "2010" "2011"
fuente
as.numeric(substring(a,7,10))
Como se discutió en los comentarios, esto se puede lograr convirtiendo la entrada en
Date
formato y extrayendo el año, por ejemplo, así:format(as.Date(df1$Date, format="%d/%m/%Y"),"%Y")
fuente
format()
la documentación de, no se dice nada sobre el segundo argumento que proporcionó. ¿Cómo debo entender esto??format
: "formato es una función genérica . Aparte de los métodos descritos aquí, hay métodos para fechas ( ver formato.Date )". From?format.Date
: "## Método S3 para el formato de clase 'Date' (x, ...) [donde ... denota] más argumentos que se pasarán desde o hacia otros métodos, incluido el formato para los métodos as.character y as.Date . ". Vea también el primer ejemplo en?format.Date
.https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html http://vita.had.co.nz/papers/lubridate.pdf
fuente
Cuando convierte su variable a
Date
:date <- as.Date('10/30/2018','%m/%d/%Y')
luego puede recortar los elementos que desee y crear nuevas variables, como año:
year <- as.numeric(format(date,'%Y'))
o mes:
month <- as.numeric(format(date,'%m'))
fuente
Si está utilizando el
date
paquete , esto se puede hacer con bastante facilidad.library(date) Date <- c("01/01/2009", "01/01/2010", "01/01/2011", "01/01/2012") Date <- as.date(Date) Date # [1] 1Jan2009 1Jan2010 1Jan2011 1Jan2012 date.mdy(Date)$year # [1] 2009 2010 2011 2012 ## be aware that these are now integers and thus different methods may be invoked: str(date.mdy(Date)$year) # int [1:4] 2009 2010 2011 2012 summary(Date) # First Last # "1Jan2009" "1Jan2012" summary(date.mdy(Date)$year) # Min. 1st Qu. Median Mean 3rd Qu. Max. # 2009 2010 2010 2010 2011 2012
fuente
Este es más un consejo que una respuesta específica, pero mi sugerencia es convertir las fechas en variables de fecha inmediatamente, en lugar de mantenerlas como cadenas. De esta manera, puede usar funciones de fecha (y hora) en ellos, en lugar de intentar usar soluciones muy problemáticas.
Como se señaló, el paquete lubridate tiene buenas funciones de extracción.
Para algunos proyectos, he descubierto que unir las fechas desde el principio es útil: cree variables de año, mes, día (del mes) y día (de la semana) para comenzar. Esto puede simplificar resúmenes, tablas y gráficos, porque el código de extracción está separado del código de resumen / tabla / gráfico, y porque si necesita cambiarlo, no tiene que implementar esos cambios en varios puntos.
fuente
Desde hace algún tiempo, también puede confiar únicamente en el
data.table
paquete y suIDate
clase más las funciones asociadas (Verificar?as.IDate()
). Por lo tanto, no es necesario instalarlo adicionalmentelubridate
.require(data.table) a <- c("01/01/2009", "01/01/2010" , "01/01/2011") year(as.IDate(a, '%d/%m/%Y')) # all data.table functions
fuente