2015-05-05 11 views
12

Ho un problema. Ho scaricato i dati e date tranformed in formato POSIXltProblemi con dati dplyr e 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")) 

frame di dati è di circa transazione in un gioco on-line. Contiene valore (il suo pagamento), transaction_date, intall_date e ID. Ho aggiunto una nuova colonna, che i giorni festivi dopo l'installazione. Ho cercato di riassumere i dati utilizzando dlyr

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

E ho ottenuto un errore: Errore : colonna 'TRANSACTION_DATE' ha tipo non supportato: POSIXlt, POSIXt

Come posso risolvere il problema?

UPD. Ho modificato le classi delle colonne Date in Character. Ha risolto il problema. Ma posso usare dlyr senza cambiare classe nel mio set di dati?

+15

uso 'POSIXct' invece – eddi

+4

Cosa Eddi detto ... avvolgere' as.POSIXct' intorno alle chiamate strptime. –

risposta

5

Si potrebbe utilizzare as.POSIXct come raccomandato nei commenti, ma se le ore, i minuti ei secondi non contano allora si dovrebbe semplicemente usare 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)) 
0

Come osservato here, questa è una "caratteristica" della il tidyverse. Non vogliono gestire l'oggetto POSIXlt perché è una sorta di elenco all'interno di un vettore. Tuttavia, l'utilizzo di as.POSIXct non è sempre un'opzione. Nel mio caso avevo davvero bisogno della classe POSIXlt per gestire alcuni dati non ripuliti. In questo caso, basta tornare alla buona R. base stabile vecchio Nel tuo caso:

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