1. 日期通常以字符串的形式输入到R中,然后转化为数值形式存储的日期变量,函数as.Date()用于执行这种转化,其语法为as.Date(x, "input_format"),其中x是字符型数据,input_format则是读入日期的适当格式。
%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-02-13"))
> mydates
[1] "2007-06-22" "2004-02-13"
2. 格式转化
> strDates <- c("01/05/1965", "08/16/1975")
> dates <- as.Date(strDates, "%m/%d/%Y") #输入的日期转化为对应日期,其中%m对应为月份,%d对应为日期,%Y对应为年
> dates
[1] "1965-01-05" "1975-08-16"
> str(dates)
Date[1:2], format: "1965-01-05" "1975-08-16"
3. 案例:
在leadership数据集中,日期是以mm/dd/yy的格式来表示的,现在将其转化为默认的yyyy-mm-dd格式,代码为:
> myformat <- "%m/%d/%y"
> leadership$testDate <- as.Date(leadership$testDate, myformat)
> leadership
managerID testDate country gender age item1 item2 item3 item4 item5 stringsAsFactor
1 1 2008-10-24 US M 32 5 4 5 5 5 FALSE
2 2 2008-10-28 US F 45 3 5 2 5 5 FALSE
3 3 2008-10-01 UK F 25 3 5 5 5 2 FALSE
4 4 2008-10-12 UK M 39 3 3 4 NA NA FALSE
5 5 2009-05-01 UK F NA 2 2 1 2 1 FALSE
agecat
1 Young
2 Young
3 Young
4 Young
5 <NA>
4. 当前日期
> Sys.Date() # 给出当前日期
[1] "2014-01-18"
> date() #返回当前的日期和时间
[1] "Sat Jan 18 14:22:07 2014"
> today<-Sys.Date()
> format(today,format = "%B %d %Y") # 格式化当前日期
[1] "一月 18 2014"
> format(today,fomat ="%A")
[1] "2014-01-18"
5. 两个日期的相减:
> startdate <- as.Date("2004-02-12")
> enddate <- as.Date("2011-01-22")
> days <-enddate - startdate;days # 两个时间点之差
Time difference of 2536 days
6. 用difftime()来计算时间间隔,并以星期,天,时,分,秒来表示。
> today <- Sys.Date()
> dob <- as.Date("1956-10-12")
> difftime(today, dob, units="weeks")
Time difference of 2988.143 weeks
7. as.character(dates)用于将日期转化为字符型变量,其它与日期有关的函数可以查看help(as.Date),help(strftime),与日期有关的包为lubridate,复杂日期计算有关
的包为fCalendar。
%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-02-13"))
> mydates
[1] "2007-06-22" "2004-02-13"
2. 格式转化
> strDates <- c("01/05/1965", "08/16/1975")
> dates <- as.Date(strDates, "%m/%d/%Y") #输入的日期转化为对应日期,其中%m对应为月份,%d对应为日期,%Y对应为年
> dates
[1] "1965-01-05" "1975-08-16"
> str(dates)
Date[1:2], format: "1965-01-05" "1975-08-16"
3. 案例:
在leadership数据集中,日期是以mm/dd/yy的格式来表示的,现在将其转化为默认的yyyy-mm-dd格式,代码为:
> myformat <- "%m/%d/%y"
> leadership$testDate <- as.Date(leadership$testDate, myformat)
> leadership
managerID testDate country gender age item1 item2 item3 item4 item5 stringsAsFactor
1 1 2008-10-24 US M 32 5 4 5 5 5 FALSE
2 2 2008-10-28 US F 45 3 5 2 5 5 FALSE
3 3 2008-10-01 UK F 25 3 5 5 5 2 FALSE
4 4 2008-10-12 UK M 39 3 3 4 NA NA FALSE
5 5 2009-05-01 UK F NA 2 2 1 2 1 FALSE
agecat
1 Young
2 Young
3 Young
4 Young
5 <NA>
4. 当前日期
> Sys.Date() # 给出当前日期
[1] "2014-01-18"
> date() #返回当前的日期和时间
[1] "Sat Jan 18 14:22:07 2014"
> today<-Sys.Date()
> format(today,format = "%B %d %Y") # 格式化当前日期
[1] "一月 18 2014"
> format(today,fomat ="%A")
[1] "2014-01-18"
5. 两个日期的相减:
> startdate <- as.Date("2004-02-12")
> enddate <- as.Date("2011-01-22")
> days <-enddate - startdate;days # 两个时间点之差
Time difference of 2536 days
6. 用difftime()来计算时间间隔,并以星期,天,时,分,秒来表示。
> today <- Sys.Date()
> dob <- as.Date("1956-10-12")
> difftime(today, dob, units="weeks")
Time difference of 2988.143 weeks
7. as.character(dates)用于将日期转化为字符型变量,其它与日期有关的函数可以查看help(as.Date),help(strftime),与日期有关的包为lubridate,复杂日期计算有关
的包为fCalendar。