dplyr和POSIXlt数据存在问题

Sla*_*vka 23 r 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"))
Run Code Online (Sandbox Code Playgroud)

数据框是关于一个在线游戏中的交易.它包含值(支付),transaction_date,intall_date和ID.我添加了新列,安装后显示.我试图使用dlyr汇总数据

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

我有一个错误:错误:列'transaction_date'具有不受支持的类型:POSIXlt,POSIXt

我该如何解决?

UPD.我将Date列的类更改为Character.它解决了问题.但是我可以使用dlyr而不更改我的数据集中的类吗?

Jac*_*tat 13

您可以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))
Run Code Online (Sandbox Code Playgroud)


Bas*_*ien 6

如前所述这里,这是一个在tidyverse的“功能”。他们不想处理POSIXlt对象,因为它是向量中的某种列表。但是,使用as.POSIXct并不总是一种选择。就我而言,我确实需要POSIXlt该类来处理一些未清除的数据。在这种情况下,只需回到良好的旧稳定基数R。

df2 <- aggregate(df1$value, by=list(df$days), sum)
Run Code Online (Sandbox Code Playgroud)