【问题标题】:What is the smartest approach for this date-conversion?这种日期转换最聪明的方法是什么?
【发布时间】:2021-09-22 06:36:19
【问题描述】:

当我试图分析来自 kaggle 的数据集时,我遇到了一些转换问题。我想从“2022 年 4 月 31 日 8:26”检索 ISO 日期 à la “2022-04-31”。

我的第一个想法是通过循环和 if 逻辑的经典编程方法 - 负担不起。这里的问题是缺少前导零。

第二种方法是通过 str_split 将列字符串值分开,然后再次将其转换在一起:

################################################################################
#                             START OF SCRIPT                                   
################################################################################

suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(lubridate))

################################################################################
#                                  ETL                                  
################################################################################

#---->> https://www.kaggle.com/carrie1/ecommerce-data
raw_data  <-  read.csv("data 2.csv", sep = ",")

clean_data <- raw_data %>% drop_na() 
clean_data <-  clean_data[!duplicated(clean_data[,1:8]),]

#
## date conversion
#

split <- str_split(clean_data$InvoiceDate, "/") %>%  plyr::ldply(,data.frame)
colnames(split) <- c("month", "day", "year")
split$year <- substr(split$year, 1,4) 

######
filled_day = as.Date(split$day, format = "%d")
str_day <- substr(filled_day, 9,10)

对于 day 列,它似乎是这样工作的,但我无法使用 base 和 lubridate 重新转换月份。也许我的方法要么太复杂,要么太简单。请与我分享您的想法

【问题讨论】:

    标签: r date format data-science


    【解决方案1】:

    您可以将as.Dateformat %m/%d/%Y 一起使用。

    as.Date("4/30/2022 8:26", "%m/%d/%Y")
    #[1] "2022-04-30"
    

    但这仅适用于有效日期。

    as.Date("4/31/2022 8:26", "%m/%d/%Y")
    #[1] NA
    

    因为没有 4 月 31 日。

    另一种方法是使用subgsub 不测试日期是否有效:

    gsub("\\b(\\d)\\b", "0\\1"
        , sub("(\\d+)/(\\d+)/(\\d+).*", "\\3-\\1-\\2", "4/31/2022 8:26"))
    #[1] "2022-04-31"
    

    【讨论】:

    • 好的,好像我只是给 as.Date 提供了错误的格式信息。我使用了“%Y/%m/%d”,它给出了“0012-09-20”而不是“2011-12-09”。
    猜你喜欢
    • 2013-12-11
    • 2013-02-13
    • 2016-06-10
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多