Problems with dplyr and POSIXlt data

24,699

Solution 1

You could use as.POSIXct as recommended in the comments but if the hours, minutes, and seconds don't matter then you should just use 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))

Solution 2

As noted here, this is a "feature" of the tidyverse. They don't want to handle POSIXlt object because it is some kind of list within a vector. However, using as.POSIXct isn't always an option. In my case I really needed the POSIXlt class to handle some uncleaned data. In that case, just go back to good old stable base R. In your case:

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

Related videos on Youtube

Slavka
Author by

Slavka

Updated on July 09, 2022

Comments

  • Slavka
    Slavka almost 2 years

    I have a problem. I downloaded data and tranformed dates into POSIXlt format

    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"))
    

    Data frame is about transaction in one online game. It contains value (its payment), transaction_date, intall_date and ID. I added new column, which showndays after installation. I tried to summarise data using dlyr

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

    And I've got an error: Error: column 'transaction_date' has unsupported type : POSIXlt, POSIXt

    How can i Fix it?

    UPD. I changed classes of Date columns into Character. It solved problem. But can i use dlyr withouts changing classes in my dataset?

    • eddi
      eddi about 9 years
      use POSIXct instead
    • IRTFM
      IRTFM about 9 years
      What eddi said... wrap as.POSIXct around the strptime calls.