【问题标题】:Converting Date formats in R [closed]在 R 中转换日期格式 [关闭]
【发布时间】:2018-07-18 16:55:23
【问题描述】:
dates <- as.Date(dli$Dates)

class(dates)
[1] "Date"

dates
   [1] "2016-01-01" "2016-01-02" "2016-01-03" "2016-01-04" "2016-01-05" "2016-01-06"
   [7] "2016-01-07" "2016-01-08" "2016-01-09" "2016-01-10" "2016-01-11" "2016-01-12"
  [13] "2016-01-13" "2016-01-14" "2016-01-15" "2016-01-16" "2016-01-17" "2016-01-18"
  [19] "2016-01-19" "2016-01-20" "2016-01-21" "2016-01-22" "2016-01-23" "2016-01-24"
  [25] "2016-01-25" "2016-01-26" "2016-01-27" "2016-01-28" "2016-01-29" "2016-01-30"
  [31] "2016-01-31" "2016-02-01" "2016-02-02" "2016-02-03" "2016-02-04" "2016-02-05"
  [37] "2016-02-06" "2016-02-07" "2016-02-08" "2016-02-09" "2016-02-10" "2016-02-11"

这是我的日期格式,所以我需要将其转换为“2016-month-day” 我得到了 NA 值

dates <- as.Date(dli$Dates,"%d/%b/%Y")

class(dates)
[1] "Date"

dates
   [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [31] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [61] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
  [91] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
 [121] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 

你能给点建议吗 提前致谢

【问题讨论】:

  • 你可能需要使用"%d/%m/%Y"

标签: r date


【解决方案1】:

好的做法是将 R 中的日期存储为 YYYY-MM-DD,并且您的字符串似乎已经采用了良好的格式,但是:

您传递给as.Date 的格式必须描述字符串包含的内容,而不是您期望的输出内容。

"%d/%b/%Y" 代表“日为数字(0-31)斜线缩写月斜线 4 位数年份”,您的字符串格式为“4 位数年份 - 月份作为数字 - 日期作为数字”。

如果要格式化日期,需要调用format:

> date <- "2016-01-01"
> date <- as.Date(date, format = "%Y-%m-%d")
> date
[1] "2016-01-01"
> format(date, "%d/%b/%Y")
[1] "01/jan/2016"

【讨论】:

    【解决方案2】:

    要获得所需的格式,即 2016-month-day ,您可以在将字符串向量转换为 Date 类型后使用 format 函数。

    我希望下面的代码 sn-p 可以消除您的疑问。

    > d = c("2016-02-08","2016-02-18","2015-02-08","2016-02-02")
    > class(d)
    [1] "character"
    > d = as.Date(d)
    > class(d)
    [1] "Date"
    > d = format(d,"%Y-%b-%d")
    > d
    [1] "2016-Feb-08" "2016-Feb-18" "2015-Feb-08" "2016-Feb-02"
    

    Format 函数将日期类型对象转换为所需的格式。有关日期类型格式的更多信息,请参阅此link。

    【讨论】:

      【解决方案3】:

      如果您只想以这种格式呈现日期,请使用format:

      x <- as.Date("2016-01-01")
      format(x, "%Y %b %a %d")
      
      [1] "2016 Jan Fri 01"
      

      这里有一个关注点分离。如果您已经将日期信息作为日期类型存储在 R 中,那么您无需在内部进行任何更改即可从这些日期中提取更多信息。

      Demo

      【讨论】:

      • 嗨蒂姆,我使用了上面的命令,但我得到了同样的错误,日期 日期 [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 实际上我的日期是字符形式
      • 你跑的和我的回答完全不一样。如果您有文本日期,则先使用as.Date 将它们转换为日期类型,然后调用格式。
      【解决方案4】:

      您可以使用as.Date() 在保存为字符的日期和Date 对象之间进行转换。

      如果要更改Date 对象的格式,可以使用format()。 您已将"2016-month-day" 指定为问题中所需的日期格式,但在您提供的代码中使用的是"%d/%b/%Y"。它的工作方式是:% 表示下一个字符将是转换规范,其他所有字符(例如(- 或/)将用于查找/添加分隔符到日期表示。(参见@ 987654330@了解详情)。

      所以在你的情况下,只需使用

      dates <- format(dli$Dates, format = "%Y-%b-%d")
      

      获取问题文本中指定的结果:

      [1] "2016-Jan-01" "2016-Jan-02" "2016-Jan-03" "2016-Jan-04" "2016-Jan-05"
      

      或者这个:

      dates <- format(dli$Dates, format = "%Y/%b/%d")
      

      获取您在代码中使用的内容:

      [1] "2016/Jan/01" "2016/Jan/02" "2016/Jan/03" "2016/Jan/04" "2016/Jan/05"
      

      【讨论】:

        【解决方案5】:

        您可以使用包 lubridate 通过 ymd 转换为日期,然后按照您希望的方式对其进行格式化

        Dates_df <-  mutate(Dates, dli = format(ymd(dli), "%Y/%b/%d")
        

        (我在这里使用 dplyr,我假设您在 Dates 中有其他变量)

        如果您只想将日期保存在向量中,则无需 dplyr:

        Dates_vec <-  format(ymd(Dates$dli), "%Y/%b/%d")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-23
          • 2021-12-19
          • 2021-04-21
          • 2013-05-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-11
          相关资源
          最近更新 更多