基础知识 | R语言数据处理之日期值的转换
时间:2022-07-22
本文章向大家介绍基础知识 | R语言数据处理之日期值的转换,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
R语言数据处理之日期值
可能,刚开始学习R的人都会觉得日期值的处理非常简单,却常常在数据的深度分析,特别是利用时间序列绘制循环静态图、日历图、旭日图、螺旋图或者动态GIF/VIDEO等时出现Bug,罪魁祸首往往是因为日期值与字符型变量的相互转换、日期值的算术运算以及函数使用错误导致的。
01
as.Date()函数
1、把字符串转换为日期,系统默认格式yyyy-mm-dd
> Date1<-as.Date(c("2020-07-19","2020-07-20"))
> Date1
[1] "2020-07-19" "2020-07-20"
2、把系统非默认格式的日期转换为默认格式的日期yyyy-mm-dd
> 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、修改数据框中的日期格式
#构建数据框
> 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
#修改数据框日期格式
> 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()#系统当天日期
> Today<-Sys.Date()
> Today
[1] "2020-07-19"
2、date()返回当前的日期和时间
> date()
[1] "Sun Jul 19 14:59:10 2020"
3、format()输出指定格式的日期值
> 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、将日期值转换为字符型
> str<-as.character(Sys.Date(),"%m/%d/%y")
> str
[1] "07/19/20"
03
日期值的算术运算
1、计算两个日期之间间隔天数
> Start<-as.Date("2019-12-01")
> End<-Sys.Date()
> days<-Start-End
> days
Time difference of -231 days
2、日期的加减
> z <- Sys.Date()
> z + 10
[1] "2020-07-29"
> z-10
[1] "2020-07-09"
3、seq.Date()生成有规律的日期序列
> 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函数计算时间间隔
> Today<-Sys.Date()
> Sb<-as.Date("1990-01-12")
> difftime(Today,Sb,units="weeks")
Time difference of 1592.286 weeks
5、as.difftime计算时间
> 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、
seq(from, to, by, length.out = NULL, along.with = NULL, ...)#length.out是指序列所需长度。
2、
difftime(time1, time2, tz,units = c("auto", "secs", "mins", "hours","days", "weeks")),tz用于转换的可选时区规范,主要用于“POSIXlt”对象。
3、
as.difftime(tim, format = "%X", units = "auto")tim:指定时间间隔的字符串或数值。format:指定tim格式的字符:参见strptime。默认是特定于地区的时间格式.
- 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
- Hadoop阅读笔记(七)——代理模式
- 认识ASP.NET MVC的5种AuthorizationFilter
- 2017十大“最差”密码出炉
- SVG图形绘制入门第一弹
- 使用自定义标记来构建页面
- ASP.NET MVC集成EntLib实现“自动化”异常处理[实例篇]
- ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程
- 机器学习实战之决策树
- 初学ReactJS,写了一个RadioButtonList组件
- 今天,你有微信小游戏提交审核吗?
- 云计算,迷你版线程同步
- Kubernetes 年度关键进展回顾
- 比较一下以“反射”和“表达式”执行方法的性能差异
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 简单的源码免杀过av
- vue nextTick源码
- Kubernetes Informer机制源码解析
- @PostConstruct与@PreDestroy
- webpack插件怎么手写
- @Builder注解和@EqualsAndHashCode 注解剖析
- npm link和webpack流程
- vue mixins原理
- MySQL 5.7 特性:Online DDL
- vue国际化vue-i18n简单使用
- Kubernetes引入结构化日志
- ServerEndpoint注解无法注入NoticeService
- 警告:有用的警告|让Kubernetes的使用越来越容易
- MySQL索引凭什么让查询效率提高这么多?
- 女朋友问我:Dubbo的服务引用过程