【问题标题】:Problems with dplyr and POSIXlt datadplyr 和 POSIXlt 数据的问题
【发布时间】:2015-07-15 18:57:57
【问题描述】:

我有问题。我下载了数据并将日期转换为 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。我将日期列的类更改为字符。它解决了问题。但是我可以在不更改数据集中的类的情况下使用 dlyr 吗?

【问题讨论】:

  • 改用POSIXct
  • eddi 所说的...将as.POSIXct 包裹在 strptime 调用周围。

标签: r dplyr posixlt


【解决方案1】:

您可以按照 cmets 中的建议使用 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】:

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

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

    【讨论】:

      【解决方案3】:

      我经常使用的一个技巧是:

      1. POSIXt 列(在下面的eventDate 示例中)转换为字符
      2. 执行您需要的 dplyr 操作(在下面的示例中,我们绑定两个数据帧的行)
      3. 从字符转换回 POSIXt,不要忘记设置正确的格式 (format) 和时区 (tz),就像执行步骤 1 之前一样。

      例子:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-22
        • 2022-12-07
        • 2020-03-29
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 2020-04-17
        • 2016-08-01
        相关资源
        最近更新 更多