前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | R语言数据处理之日期值的转换

基础知识 | R语言数据处理之日期值的转换

作者头像
黑妹的小屋
发布2020-08-06 15:07:03
7K0
发布2020-08-06 15:07:03
举报

R语言数据处理之日期值

可能,刚开始学习R的人都会觉得日期值的处理非常简单,却常常在数据的深度分析,特别是利用时间序列绘制循环静态图、日历图、旭日图、螺旋图或者动态GIF/VIDEO等时出现Bug,罪魁祸首往往是因为日期值与字符型变量的相互转换、日期值的算术运算以及函数使用错误导致的。

01

as.Date()函数

1、把字符串转换为日期,系统默认格式yyyy-mm-dd

代码语言:javascript
复制
> Date1<-as.Date(c("2020-07-19","2020-07-20"))
> Date1
[1] "2020-07-19" "2020-07-20"

2、把系统非默认格式的日期转换为默认格式的日期yyyy-mm-dd

代码语言:javascript
复制
> Date<-c("06/20/20","06/21/20","06/22/20","06/23/20","06/24/20","06/25/20")
> Date2<-as.Date(Date,"%m/%d/%Y")
> Date2
[1] "2020-06-20" "2020-06-21" "2020-06-22" "2020-06-23" "2020-06-24" "2020-06-25"

3、修改数据框中的日期格式

代码语言:javascript
复制
#构建数据框
> PatientID<-c(1,2,3,4,5,6)
> Date<-c("06/20/20","06/21/20","06/22/20","06/23/20","06/24/20","06/25/20")
> Age<-c(18,25,26,35,48,50)
> Gender<-c("M","F","F","M","F","M")
> City<-c("福州","厦门","泉州","龙岩","漳州","三明")
> Pr1<-c("69","57","67","65","72","55")
> Pr2<-c("180","155","159","184","167","175")
> Pr3<-c("11","14","34","23","35","12")
> Pr4<-c("6","7","5","8","6","9")
> Pr5<-c("20","34","35","56","47","19")
> S1<-c(88,78,NA,56,45,60)
> S2<-c(67,87,45,25,NA,96)
> mydata<-data.frame(PatientID,Date,Age,Gender,City,Pr1,Pr2,Pr3,Pr4,Pr5,S1,S2)
> mydata
  PatientID     Date Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2
1         1 06/20/20  18      M 福州  69 180  11   6  20 88 67
2         2 06/21/20  25      F 厦门  57 155  14   7  34 78 87
3         3 06/22/20  26      F 泉州  67 159  34   5  35 NA 45
4         4 06/23/20  35      M 龙岩  65 184  23   8  56 56 25
5         5 06/24/20  48      F 漳州  72 167  35   6  47 45 NA
6         6 06/25/20  50      M 三明  55 175  12   9  19 60 96
代码语言:javascript
复制
#修改数据框日期格式
> mydata$Date<-as.Date(mydata$Date,"%m/%d/%Y")
> mydata
  PatientID       Date Age Gender City Pr1 Pr2 Pr3 Pr4 Pr5 S1 S2
1         1 2020-06-20  18      M 福州  69 180  11   6  20 88 67
2         2 2020-06-21  25      F 厦门  57 155  14   7  34 78 87
3         3 2020-06-22  26      F 泉州  67 159  34   5  35 NA 45
4         4 2020-06-23  35      M 龙岩  65 184  23   8  56 56 25
5         5 2020-06-24  48      F 漳州  72 167  35   6  47 45 NA
6         6 2020-06-25  50      M 三明  55 175  12   9  19 60 96

02

Sys.Date()、date()、format()

1、Sys.Date()#系统当天日期

代码语言:javascript
复制
> Today<-Sys.Date()
> Today
[1] "2020-07-19"

2、date()返回当前的日期和时间

代码语言:javascript
复制
> date()
[1] "Sun Jul 19 14:59:10 2020"

3、format()输出指定格式的日期值

代码语言:javascript
复制
> Today<-Sys.Date()#系统当天日期
> Today
[1] "2020-07-19"
> date()
[1] "Sun Jul 19 14:59:10 2020"
> Today<-Sys.Date()#系统当天日期
> format(Today,format="%B %d %Y")#%B表示非缩写月份,%d表0-31的数字日期,%Y表四位数的年份
[1] "七月 19 2020"
> format(Today,format="%b %d %y")#%b表示缩写月份,%y表示两位数的年份
[1] " 7 19 20"
> format(Today,format="%m")#%m表示00-12月份
[1] "07"
> format(Today,format="%A")#%A非缩写星期名
[1] "星期日"

4、将日期值转换为字符型

代码语言:javascript
复制
> str<-as.character(Sys.Date(),"%m/%d/%y")
> str
[1] "07/19/20"

03

日期值的算术运算

1、计算两个日期之间间隔天数

代码语言:javascript
复制
> Start<-as.Date("2019-12-01")
> End<-Sys.Date()
> days<-Start-End
> days
Time difference of -231 days

2、日期的加减

代码语言:javascript
复制
> z <- Sys.Date()
> z + 10
[1] "2020-07-29"
> z-10
[1] "2020-07-09"

3、seq.Date()生成有规律的日期序列

代码语言:javascript
复制
> seq(as.Date("1992/1/1"), as.Date("2020/1/1"), "years")
 [1] "1992-01-01" "1993-01-01" "1994-01-01" "1995-01-01" "1996-01-01" "1997-01-01" "1998-01-01"
 [8] "1999-01-01" "2000-01-01" "2001-01-01" "2002-01-01" "2003-01-01" "2004-01-01" "2005-01-01"
[15] "2006-01-01" "2007-01-01" "2008-01-01" "2009-01-01" "2010-01-01" "2011-01-01" "2012-01-01"
[22] "2013-01-01" "2014-01-01" "2015-01-01" "2016-01-01" "2017-01-01" "2018-01-01" "2019-01-01"
[29] "2020-01-01"
> seq(as.Date("2020/1/1"), by = "month", length.out = 12)
 [1] "2020-01-01" "2020-02-01" "2020-03-01" "2020-04-01" "2020-05-01" "2020-06-01" "2020-07-01"
 [8] "2020-08-01" "2020-09-01" "2020-10-01" "2020-11-01" "2020-12-01"
> seq(as.Date("2019/1/1"), as.Date("2020/7/1"), by = "quarter")
[1] "2019-01-01" "2019-04-01" "2019-07-01" "2019-10-01" "2020-01-01" "2020-04-01" "2020-07-01"
> #找出两个日期之间的每个月的19号
> st <- as.Date("2019-12-01")
> en <- Sys.Date()
> ll <- seq(en, st, by = "-1 month")
> rev(ll[ll > st & ll < en])
[1] "2019-12-19" "2020-01-19" "2020-02-19" "2020-03-19" "2020-04-19" "2020-05-19" "2020-06-19"

4、difftime函数计算时间间隔

代码语言:javascript
复制
> Today<-Sys.Date()
> Sb<-as.Date("1990-01-12")
> difftime(Today,Sb,units="weeks")
Time difference of 1592.286 weeks

5、as.difftime计算时间

代码语言:javascript
复制
> as.difftime(c("0:5:26", "11:22:45"))
Time differences in mins
[1]   5.433333 682.750000
> as.difftime(c("5:26", "22:45", "2:"), format = "%H:%M")
Time differences in hours
[1]  5.433333 22.750000        NA
> z <- as.difftime(c(0,30,60), units = "mins")
> as.numeric(z, units = "secs")
[1]    0 1800 3600
> as.numeric(z, units = "hours")
[1] 0.0 0.5 1.0
> format(z)
[1] " 0 mins" "30 mins" "60 mins"

小结

1、

代码语言:javascript
复制
seq(from, to, by, length.out = NULL, along.with = NULL, ...)#length.out是指序列所需长度。

2、

代码语言:javascript
复制
difftime(time1, time2, tz,units = c("auto", "secs", "mins", "hours","days", "weeks")),tz用于转换的可选时区规范,主要用于“POSIXlt”对象。

3、

代码语言:javascript
复制
as.difftime(tim, format = "%X", units = "auto")tim:指定时间间隔的字符串或数值。format:指定tim格式的字符:参见strptime。默认是特定于地区的时间格式.
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 菜鸟学数据分析之R语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档