mutate funcion filtros r dplyr posixlt

funcion - filtros en r



Problemas con los datos dplyr y POSIXlt (3)

Como se señala here , esta es una "característica" del tidyverse. No quieren manejar el objeto POSIXlt porque es algún tipo de lista dentro de un vector. Sin embargo, usar as.POSIXct no siempre es una opción. En mi caso, realmente necesitaba la clase POSIXlt para manejar algunos datos sin limpiar. En ese caso, simplemente vuelva a la antigua base estable R: En su caso:

df2 <- aggregate(df1$value, by=list(df$days), sum)

Tengo un problema. Descargué datos y transformé las fechas en formato POSIXlt

df<-read.csv("007.csv", header=T, sep=";") df$transaction_date<-strptime(df$transaction_date, "%d.%m.%Y") df$install_date<-strptime(df$install_date, "%d.%m.%Y") df$days<- as.numeric(difftime(df$transaction_date,df$install_date, units = "days"))

El marco de datos se trata de transacciones en un juego en línea. Contiene valor (su pago), transaction_date, intall_date y ID. Agregué nueva columna, que se muestra días después de la instalación. Intenté resumir los datos usando dlyr

df2<-df %>% group_by(days) %>% summarise(sum=sum(value))

Y tengo un error: Error: la columna ''transaction_date'' no es compatible con el tipo: POSIXlt, POSIXt

¿Cómo puedo arreglarlo?

UPD. Cambié las clases de columnas de fecha en caracteres. Se solucionó el problema. ¿Pero puedo usar dlyr sin cambiar las clases en mi conjunto de datos?


Puede usar as.POSIXct como se recomienda en los comentarios, pero si las horas, los minutos y los segundos no importan, entonces solo debe usar as.Date

df <- read.csv("007.csv", header=T, sep=";") df2 <- df %>% mutate( transaction_date = as.Date(transaction_date, "%d.%m.%Y") ,install_date = as.Date(install_date, "%d.%m.%Y") ) %>% group_by(days = transaction_date - install_date) %>% summarise(sum=sum(value))


Un truco que uso a menudo es el siguiente:

  1. Convertir columnas POSIXt (en el ejemplo debajo de eventDate ) a carácter
  2. Realice las operaciones de dplyr que necesita (en el siguiente ejemplo, enlazamos filas de dos marcos de datos)
  3. Convierta de nuevo el carácter a POSIXt sin olvidar configurar el formato ( format ) y la zona horaria ( tz ) correctos tal como estaban antes de realizar el paso 1.

Ejemplo:

# step 1 df1$eventDate <- as.character.POSIXt(df1$eventDate) df2$eventDate <- as.character.POSIXt(df2$eventDate) #step 2 merged_df <- bind_rows(df1, df2) #step 3 merged_df$eventDate <- strptime(merged_df$eventDate, format = "%Y-%m-%d", tz = "UTC")