Проблемы с данными dplyr и POSIXlt - программирование

Проблемы с данными dplyr и POSIXlt

У меня проблема. Я загрузил данные и преобразовал даты в формат 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"))

Кадр данных о транзакции в одной онлайн-игре. Он содержит значение (его платеж), transaction_date, intall_date и ID. Я добавил новый столбец, который показал после установки. Я попытался обобщить данные, используя dlyr

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

И у меня есть ошибка: Ошибка: столбец "transaction_date" имеет неподдерживаемый тип: POSIXlt, POSIXt

Как я могу его исправить?

UPD. Я изменил классы столбцов Date в Character. Это решило проблему. Но могу ли я использовать dlyr без изменения классов в моем наборе данных?

4b9b3361

Ответ 1

Вы можете использовать as.POSIXct, как рекомендовано в комментариях, но если часы, минуты и секунды не имеют значения, вы должны просто использовать 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))

Ответ 2

Как отмечено здесь, это "особенность" tidyverse. Они не хотят обрабатывать объект POSIXlt, потому что это какой-то список внутри вектора. Однако использование as.POSIXct не всегда является опцией. В моем случае мне действительно нужен класс POSIXlt для обработки некоторых неочищенных данных. В этом случае просто вернитесь к старой старой стабильной базе R. В вашем случае:

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