如何分解R中的日期数据?

时间:2012-07-10 05:07:17

标签: r datetime lubridate

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

20100701
20100702
20100703
20100704

我怎样才能将它们转换为以下形式:

2010 07 01
2010 07 02
2010 07 03

年份,月份和日期的数据分为3列。

3 个答案:

答案 0 :(得分:3)

如果您使用包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()提取当天

答案 1 :(得分:2)

简而言之,这也可以通过lubridate包中的函数strptimeformat.POSIXct来完成(尽管可能不如使用包base更方便):

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

答案 2 :(得分:1)

一些虚拟数据:

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