【问题标题】:I need to change date format from "xx time ago" like: a year ago, 1 week ago to "%Y/%m/%d"我需要将日期格式从“xx 时间前”更改为:一年前,1 周前为“%Y/%m/%d”
【发布时间】:2023-03-18 03:18:01
【问题描述】:

我有从互联网收集的数据。日期列格式类似于“1 个月前”“2 年前”“4 天前”,我需要更改此格式。

我试过了:

googleR$`Date/Time` <- as.Date.character(googleR$`Date/Time`, 
                                         format = format(googleR$`Date/Time`), 
                                         tryFormats = c("%d/%m/%Y"))

但它只给了我所有记录的今天日期

我也尝试了很多其他方法,但出现了同样的错误

“字符串不是标准的明确格式”

这是我要转换的数据:

format.factor(googleR$`Date/Time`)
 [1] "7 months ago " "2 months ago " "a week ago   " "2 years ago  " "2 years ago  " "5 months ago " "10 months ago"
 [8] "2 years ago  " "4 years ago  " "2 years ago  " "2 years ago  " "11 months ago" "3 years ago  " "3 years ago  "
[15] "2 years ago  " "2 years ago  " "10 months ago" "10 months ago" "a year ago   " "a year ago   " "2 years ago  "
[22] "2 years ago  " "2 years ago  " "2 years ago  " "2 years ago  " "2 years ago  " "3 years ago  " "4 years ago  "
[29] "4 years ago  " "a week ago   " "a week ago   " "2 weeks ago  " "a month ago  " "2 months ago " "5 months ago "
[36] "7 months ago " "7 months ago " "8 months ago " "10 months ago" "10 months ago" "a year ago   " "a year ago   "
[43] "a year ago   " "a year ago   " "a year ago   " "a year ago   " "a year ago   " "2 years ago  " "2 years ago  "
[50] "2 years ago  " "4 years ago  " "6 years ago  "

【问题讨论】:

    标签: r date


    【解决方案1】:

    您可以使用sub从每个元素中删除“之前”,然后使用lubridateadd_with_rollback如下

    library(lubridate)
    add_with_rollback(Sys.time(), - as.period(sub("\\s+ago", "", x)))
    

    结果

    "2019-02-28 18:13:18 CET"  "2017-03-31 18:13:18 CEST" "2019-03-27 18:13:18 CET" 
    

    数据

    x <- c("1 month ago", "2 years ago", "4 days ago")
    

    【讨论】:

    • 不错!我什至不知道“add_with_rollback”!
    【解决方案2】:

    您可能需要首先使用正则表达式来确定您拥有的时间间隔类型,然后从那里开始。我喜欢 stringr 包。例如,如果 IN 是你的输入字符串,OUT 是你想要的输出,你可以说

     if(str_detect(IN, "day")){OUT <- as.numeric(str_extract(IN, "^[0-9]*"))}
    

    现在,你得到了天数,你可以做类似的事情

     Sys.Date() - OUT
    

    获取日期。然后你可以在几个月和几年内做基本相同的事情。这不可避免地会是近似的,因为并非所有月份都有相同的天数,但听起来你的输入数据无论如何都不是超级精确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 2011-02-19
      • 2020-06-22
      • 2015-10-26
      • 2017-11-02
      • 2013-08-08
      • 2023-03-08
      相关资源
      最近更新 更多