在 R 中,我得到日期的数据类如下:
20100701
20100702
20100703
20100704
我如何将它们转换为以下形式:
2010 07 01
2010 07 02
2010 07 03
年、月、日数据分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()
提取一天lubridate
顺便提一下,这也可以通过函数strptime
和包format.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
一些虚拟数据:
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