【问题标题】:How to decompose the data of date in R?如何分解R中的日期数据?
【发布时间】:2012-07-10 05:07:16
【问题描述】:

在R中,我得到日期的数据类如下:

20100701
20100702
20100703
20100704

如何将它们转换为以下形式:

2010 07 01
2010 07 02
2010 07 03

年、月、日三栏数据。

【问题讨论】:

  • 不清楚如何回答您的问题。您能否编辑以包含dput(myinputdatahere) 的输出,以便我们可以复制您正在使用的内容?这将为我们提供准确回答您的问题所需的元数据。

标签: r datetime lubridate


【解决方案1】:

如果您使用包lubridate,这非常简单:

library(lubridate)
x <- ymd(dates)
data.frame(y=year(x), m=month(x), d=day(x))
     y m d
1 2010 7 1
2 2010 7 2
3 2010 7 3
4 2010 7 4

lubridate 提供了一系列方便的函数来处理日期。在这个例子中:

  • ymd() 将字符串转换为日期,猜测格式是什么。
  • year()提取年份
  • month() 提取月份
  • day()提取日

【讨论】:

    【解决方案2】:

    顺便提一下,这也可以通过base 包中的函数strptimeformat.POSIXct 来完成(尽管可能不如使用包lubridate 方便):

    x <- c(20100701,20100702,20100703,20100704)
    strptime(x, format="%Y%m%d") -> y
    data.frame(year=format(y,format="%Y"),month=format(y,format="%m"),day=format(y,format="%d"))
      year month day
    1 2010    07  01
    2 2010    07  02
    3 2010    07  03
    4 2010    07  04
    

    【讨论】:

      【解决方案3】:

      一些虚拟数据:

      dates <- c("20100701", "20100701", "20100701", "20100701")
      

      获取日期:

      library(lubridate)
      ymd(dates)
      Using date format %Y%m%d.
      [1] "2010-07-01 UTC" "2010-07-01 UTC" "2010-07-01 UTC" "2010-07-01 UTC"
      

      获取数据框,然后拆分字符串:

      library(stringr)
      data.frame(year=str_sub(dates, 1, 4), month=str_sub(dates, 5, 6), day=str_sub(dates, 7, 8))
        year month day
      1 2010    07  01
      2 2010    07  01
      3 2010    07  01
      4 2010    07  01
      

      【讨论】:

      • 您可以通过将str_sub 更改为substr 轻松摆脱stringr 依赖
      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多