【问题标题】:How to convert a character string ("17NOV03") to a date to be used for arithmetic [closed]如何将字符串(“17NOV03”)转换为用于算术的日期[关闭]
【发布时间】:2021-11-13 14:45:44
【问题描述】:

我有一列包含 2003 年和 2004 年的日期。目前,该列是一个字符串,如下所示(参见第 6 列):

我想将该列转换为日期,但由于字符串中间的月份缩写,我不确定如何转换。我尝试了多种方式进行变异,但似乎无法使其发挥作用。

最终,我的目标是使用 diff_time() 来显示每个条目从 2003 年 1 月 1 日开始的天数。例如,2003 年 1 月 3 日将显示为 3,2004 年 1 月 5 日将显示为 370,依此类推。以下是我目前正在使用的内容:

data$contact_date1 <- as.Date(data$contact_date1, format="%d-%m-%y")

data$contact_date1 <- difftime(
  as.POSIXct("2003-01-01 12:00:00"), 
  data$contact_date1, 
  unit = "days")

任何帮助将不胜感激!非常感谢。

【问题讨论】:

  • 您确定您为格式参数使用了正确的字符串吗? “%d%b%y”怎么样?

标签: r date regression dplyr


【解决方案1】:

使用包lubridate;其函数dmy 将您的数据格式转换为yyyy-mm-dd 格式:

library(lubridate)
round(difftime(dmy(data$contact_date1),"2003-01-01", units = "days"), 0)
Time differences in days
[1]  9 45

将日期添加到数据框中:

data$days <- round(difftime(dmy(data$contact_date1),"2003-01-01", units = "days"), 0)

玩具数据:

data <- data.frame(
  contact_date1 = c("10JAN2003", "15FEB2003")
)

【讨论】:

    【解决方案2】:

    如 cmets 所述,您应该使用 %b 来解码您的日期。

    查看?strptime 帮助页面。

    first.date <- as.POSIXct("2003-01-01 12:00:00")
    
    weird.dates <- c("17NOV03","06May02")
    
    ?strptime
    
    times <- as.Date(weird.dates, format = "%d%b%y")
    
    difftime(time1 = first.date, time2 = times)
    #> Time differences in days
    #> [1] -319.5417  240.4583
    

    由reprex package (v2.0.1) 于 2021-09-19 创建

    【讨论】:

      猜你喜欢
      • 2020-05-24
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 2023-03-11
      • 2019-12-17
      相关资源
      最近更新 更多