日期值通常以字符串形式输入到R中,然后转化为数值形式存储的日期变量,进行后续的分析计算。
as.Date函数
函数as.Date()执行这种转换,语法为as.Date(x,"input_format ")
,
其中x 是字符型数据, input_format
则给出了用于读入日期的适当格式。
日期格式
符号 | 含义 | 示例 |
---|---|---|
%d | 数字表示的日期(0~31) | 02、31 |
%a | 缩写的星期名 | Mon |
%A | 非缩写星期名 | Monday |
%m | 月份(00~12) | 00~12 |
%b | 缩写的月份 | Jan |
%B | 非缩写月份 | January |
%y | 两位数的年份 | 07 |
%Y | 四位数的年份 | 2012 |
as.Date()
的默认输入格式是yyyy-mm-dd。
olddates <- c("2012-09-12", "2006-12-09")
newdates <- as.Date(olddates )
> str(olddates)
chr [1:2] "2012-09-12" "2006-12-09"
> str(newdates)
Date[1:2], format: "2012-09-12" "2006-12-09"
使用mm/dd/yyyy 的格式读取日期数据。
strDates <- c("01/05/1965", "08/16/1975")
dates <- as.Date(strDates, "%m/%d/%Y")
> str(strDates )
chr [1:2] "01/05/1965" "08/16/1975"
> str(dates )
Date[1:2], format: "1965-01-05" "1975-08-16"
处理时间戳的函数
Sys.Date()
可以返回当天的日期, 而date()
则返回当前的日期和时间。
> Sys.Date()
[1] "2023-08-08"
> date()
[1] "Tue Aug 8 11:41:44 2023"
使用函数format(x, format="output_format")
来输出指定格式的日期值, 并且可以提取日期值中的某些部分:
> today <- Sys.Date()
> format(today, format="%B %d %Y")
[1] "八月 08 2023"
> format(today, format="%A")
[1] "星期二"
R的内部在存储日期时, 是使用自1970年1月1日以来的天数表示的, 更早的日期则表示为负数。
使用函数difftime() 来计算时间间隔
函数difftime()来计算时间间隔, 并以星期、 天、时、 分、 秒来表示。
常用格式和参数为:
difftime(time1, time2, units = c("auto" , "secs", "mins", "hours", "days", "weeks"))
假如我出生于1993年12月24日,计算截至今天出生多少天了,出生于星期几?。
> today <- Sys.Date()
> birthday <- as.Date("1993-12-24")
> diff <- difftime(today, birthday, units = "days")
> print(diff)
Time difference of 10819 days
> format(birthday, "%A")
[1] "星期五"
将日期转换为字符型变量
以上面的输入并转换后的数据为例进行操作,通过as.character()
函数进行。
> today <- Sys.Date()
> str(today)
Date[1:1], format: "2023-08-08"
> today_str <- as.character(today)
> str(today_str)
chr "2023-08-08"
其它说明
-
通过
help(as.Date)
和help(strftime)
了解更多字符串转换为日期的细节; -
通过
help(ISOdatetime)
了解更多关于日期和时间格式的知识; -
lubridate
包可以用于识别和解析日期—时间数据, 抽取日期—时间成分(例如年份、 月份、 日期等) , 以及对日期—时间值进行算术运算。; -
timeDate
包可以用于对日期进行复杂的计算。
网友评论