R语言 把日期-时间列分割成日期和时间变量
R编程语言提供了多种处理日期和日期/时间数据的方法。内置框架as.Date函数只负责处理日期,R中的库Chron同时处理日期和时间,但不支持时区;而POSIXct和POSIXlt类提供了对处理日期时间对象以及时区的支持。日期时间对象可以轻松转换为其他与日期相关的对象。
方法1:使用POSIXct对象
一个日期字符串可以首先被转换为POSIXct对象,然后可以很容易地对其进行基本算术。POSIXct对象简化了数学运算的过程,因为它们依赖于秒作为时间管理的主要单位。日期被转换为标准时区,即UTC。使用R语言中的as.POSIXct(date)方法,一个字符串类型的日期对象可以被转换为POSIXct对象。
语法
as.POSIXct ( date , format)
参数:
date – 字符串日期对象
format – 日期的格式指定器
日期对象被存储为从1970年1月1日开始计算的天数,其中负数被用来指代更早的日期。Date对象直接支持基本的算术,其中在整数中直接对Dates进行加减,n天数直接被加减,标准的日期格式作为输出返回。Date对象也可以指定不同的格式来包含日期。as.Date()方法将一个字符串日期对象作为输入,并将其转换为一个Date对象。
语法
as.Date(字符日期对象)
R中的 format() 方法用于将指定的日期时间对象按照所需的格式进行格式化。
语法
format (datetime , format = )
例子
# declaring a datetime vector
vec <- c("2021-05-08 08:32:07","2021-07-18 00:21:07",
"2020-11-28 23:32:09","2021-05-11 18:32:07")
# creating datetime column in the dataframe
data_frame <- data.frame(datetime = as.POSIXct(
vec, format = "%Y-%m-%d %H:%M:%S"))
print ("Original DataFrame")
print (data_frame)
# extracting time
data_frametime <- format(as.POSIXct(
data_framedatetime),format = "%H:%M:%S")
# extracting date
data_framedate <- as.Date (data_framedatetime)
print ("Modified DataFrame")
print (data_frame)
输出
[1] "Original DataFrame"
datetime
1
2021-05-08 08:32:07
2
2021-07-18 00:21:07
3
2020-11-28 23:32:09
4
2021-05-11 18:32:07
[1] "Modified DataFrame"
datetime time date
1 2021-05-08 08:32:07 08:32:07 2021-05-08
2 2021-07-18 00:21:07 00:21:07 2021-07-17
3 2020-11-28 23:32:09 23:32:09 2020-11-28
4 2021-05-11 18:32:07 18:32:07 2021-05-11
方法2:使用lubridate包
R编程语言中的Lubridate包是用来处理日期和时间对象的。它使解析和操作这些对象更加容易,并且需要安装和加载到工作空间。
R语言中的Sys.time()函数是用来根据IST区获取当前的日期和时间对象。 R语言中的hours()方法用于输入一个表示小时数的整数。lubridate “包的对象允许对其各个组成部分进行直接算术,因此小时数可以直接从 lubridate 时间对象中减去。一个结果也是属于这个类的对象。
Sys.Date() 函数用于返回系统的日期。
语法: Sys.Date()
参数:
不接受任何参数
R中的ymd_hms()方法用于将一个日期时间对象输入工作空间。
例子
library("lubridate")
# declaring a datetime vector
vec <- c("2021-05-08 08:32:07","2021-07-18 00:21:07",
"2020-11-28 23:32:09","2021-05-11 18:32:07")
# creating datetime column in the dataframe
data_frame <- data.frame(datetime = ymd_hms(vec))
print ("Original DataFrame")
print (data_frame)
# extracting time
data_frametime <- format(as.POSIXct(
data_framedatetime),format = "%H:%M:%S")
# extracting date
data_framedate <- as.Date (data_framedatetime)
print ("Modified DataFrame")
print (data_frame)
输出
[1] "Original DataFrame"
datetime
1
2021-05-08 08:32:07
2
2021-07-18 00:21:07
3
2020-11-28 23:32:09
4
2021-05-11 18:32:07
[1] "Modified DataFrame"
datetime time date
1 2021-05-08 08:32:07 08:32:07 2021-05-08
2 2021-07-18 00:21:07 00:21:07 2021-07-17
3 2020-11-28 23:32:09 23:32:09 2020-11-28
4 2021-05-11 18:32:07 18:32:07 2021-05-11