【问题标题】:Parse string with additional characters in format to Date将带有附加字符的字符串解析为日期格式
【发布时间】:2016-11-19 12:48:48
【问题描述】:

我有一个字符串变量,我想将其解析为Date 类。除了日、年和月,该格式还有其他字符,如分隔符 (, )、字母和撇号 (u''),如下所示:

"u'9', u'2005', u'06'"

我试过了

as.Date(my_data$date, format = '%d %Y %m')

...但它只会产生缺失值。我希望 R 将 u'' 解释为 unicode 指示符,但事实并非如此。

如何去除所有未使用的字符,使 "u'9', u'2005', u'06'" 变成简单的 "9 2005 06"

【问题讨论】:

    标签: r date datetime as.date


    【解决方案1】:

    如果是字符类,可以试试:

    library(lubridate)
    
    test <- c("u'9'", "u'2005'", "u'06'")
    
    dym(paste(gsub("u|'", "", test), collapse = "/"))
    [1] "2005-06-09 UTC"
    

    在这里,我使用lubridate 将删除“u”和' 字符的字符串转换为时间格式。 我在paste 中使用的 collapse 字符是任意的,lubridate 可以处理几乎任何事情,作为日期部分之间的分隔符。

    【讨论】:

      【解决方案2】:

      试试这个:

      as.Date(gsub("[u',()]","",my_data$date), format = '%d %Y %m')
      

      以单个字符串为例:

      d <- "(u'9', u'2005', u'06')"
      d <- gsub("[u',()]","",d)
      d.date <- as.Date(d, "%d %Y %m")
      

      结果:

      d.date
      [1] "2005-06-09"
      

      【讨论】:

        【解决方案3】:

        您不需要去除转换规范中未使用的字符。在?as.Date 中,format 参数指向?strptime(“否则,处理通过strptime”)。在?strptime* 的详细信息部分,我们发现:

        “[a]格式字符串中不属于转换规范的任何字符都按字面意思解释”

        也就是说,在as.Dateformat参数中,不仅可以包含转换规范(由%引入),还可以包含“其他字符”:

        另外,来自?as.Date

        按照指定格式尽可能处理字符串:忽略任何尾随字符

        因此,这是可行的:

        as.Date("(u'9', u'2005', u'06')", format = "(u'%d', u'%Y', u'%m")
        # [1] "2005-06-09"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-14
          • 2016-05-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多