Convierta una columna de caracteres a la fecha con múltiples formatos
Aquí están mis datos iniciales de ejemplo de Excel (la próxima vez, voy a enseñarle a mi cliente acerca de los datos ordenados):
date_string
3/13, 3/17, 3/20
4/13
5/12, 5/20
Me acerco bastante a lo que quiero con esto:
library(tidyverse)
library(stringr)
data <- str_split_fixed(data$date_string, ",", 3)%>%
as_tibble() %>%
gather() %>%
filter(value != "")
entonces me quedo con esto:
key value
v1 3/13
v1 43203
v1 5/12
v2 3/17
v2 5/20
v3 3/20
Esto es lo suficientemente bueno como para poder hacer el resto del formateo y la organización en Excel, pero cuanto más pueda hacer en R, mejor, especialmente porque tendré que volver a hacerlo todo la próxima vez que actualice el producto final. Siento que hay unalubridate
función para ayudarme con esto peromdy
ydate
sigue devolviendo errores.
El valor que quiero es la tabla de arriba pero en formato m / d / a.
Actualiza
Basado en la respuesta a continuación, agregué lo siguiente. Esto funciona, pero probablemente haya una forma más elegante de hacerlo:
data <- str_split_fixed(data$date_string, ",", 3)%>%
as_tibble() %>%
gather() %>%
filter(value != "") %>%
mutate(value =
if_else(
str_detect(value, "/") == T,
paste0(value, "/2018"),
as.character(as_date(as.numeric(value), origin = "1900-01-01")))) %>%
mutate(value =
if_else(
str_detect(value, "/") == T,
mdy(value),
ymd(value)))
Recibo estas advertencias, pero los datos son como los quiero:
1. In as_date(as.numeric(value), origin = "1900-01-01") :
NAs introduced by coercion
2. 1 failed to parse.
3. 5 failed to parse.
No estoy seguro de cómo "no se pudo analizar" cuando la columna final de "valor" se devuelve como una variable de fecha. . .