R语言处理日期数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41577291/article/details/79190100

《R语言实战》学习笔记 —— 基本数据管理之日期值

1. 创建日期型变量

日期型通常以字符串形式输入到R中,然后转化为以数值形式存储的日期变量。日期具有一定的格式,见下表:

表1 日期格式
符号 含义 示例
%d 数字表示的日期(0~31) 01~31
%a 缩写的星期名 Mon
%A 非缩写的星期名 Monday
%m 月份(00~12) 00~12
%b 缩写的月份 Jan
%B 非缩写的月份 January
%y 两位数的年份 07
%Y 四位数的年份 2007
日期值得默认输入格式为 yyyy-mm-dd。例如语句:

mydates <- as.Date(c("2007-06-22", "2004-01-21"))

将默认格式的字符串转换为对应日期。相反,

strDates <- c("01/05/1965", "06/16/1975")
dates <- as.Date(strDates, "%m/%d/%Y")

则使用mm/dd/yyyy的格式读取数据

在前面leadship数据框中,日期列时以mm/dd/yyyy的格式编码为字符型变量的。可以通过下面语句转换为日期型数据:

leadship$testDate <- as.Date(leadship$testDate,"%m/%d/%Y")

2. 计算和处理日期型变量

# 下面两个函数可以返回当前的日期和时间

> Sys.Date()
[1] "2018-01-28"
> date()
[1] "Sun Jan 28 21:53:57 2018"

扫描二维码关注公众号,回复: 4030980 查看本文章

# 可以使用format()函数来输出指定格式的日期值,或提取日期值得某些部分

> today <- Sys.Date()
> format(today, format="%B %d %Y")

[1] "一月 28 2018"
> format(today, format="%A")
[1] "星期日"

# R的内部存储日期时,是使用自1970年1月1日以来的天数表示的,更早的日期则表示为负数
# 日期值上可以进行算术运算

> startDate <- as.Date("2004-02-13")
> endDate <- as.Date("2011-01-22")
> days <- endDate - startDate
> days

Time difference of 2535 days

输出结果为2004年2月13日和2011年1月22日之间的天数

# 可以使用函数difftime()来计算时间间隔,并以星期、天、时、分、秒来表示

假设某人的出生日期是1991年6月17日,则:

> today<- Sys.Date( )

> dob <- as.Date("1991-10-12")
> difftime(today, dob, units = "weeks")

Time difference of 1372.143 weeks
> difftime(today, dob, units = "days")
Time difference of 9605 days

那么,这个人到今天为止已经有1372周或者说9605天大了。他出生在星期几呢?

3. 将日期转换为字符型变量

> strDates <- as.character(dates)

进行转换后就可以使用一系列字符处理函数来处理数据(如子集、替换、连接等)

更进一步地,

  • 查看help(as.Date)和help(strftime),了解字符型转换为日期的更多细节;
  • 参考help(ISOdatetime),了解更多关于日期和时间格式的知识;
  • lubridate包中有许多简化日期处理的函数,可用于识别和解析日期-时间数据,抽取日期-时间成分,以及进行算术运算
  • fCalendar包可以帮助对日期进行复杂的计算,提供大量的日期处理函数,可以同时处理多个时区,提供复杂的历法操作功能,支持工作日、周末和假期。





猜你喜欢

转载自blog.csdn.net/weixin_41577291/article/details/79190100