统计软件 R 语言学习笔记 (5) 统计数据类型和日期时间数据
统计数据类型和日期时间数据
本章介绍统计数据的计量尺度(定类、定序、定距、定比),重点介绍了一种特殊的数据类型:时间和日期。并讲解了一些常用时间日期函数:strptime
as.Date
,除此之外还介绍了时间 Times 类型的两种类型 POSIXct
和 POSIXlt
。
代码和笔记存储在 GitHub 库 【持续更新中,建议 star!】
1 统计数据的计量尺度
统计数据的四种计量尺度:
- 定类尺度
- 定序尺度
- 定距尺度
- 定比尺度
1.1 定类尺度
概念:又称列名尺度或类别尺度,是按照研究对象的某种属性将其划分为若干组或类的一种测度。
举例:性别 、籍贯、民族等
特征:
- 只能区分事物的类别,无法比较优劣或大小,
- 对应变量:名义变量,比如用 X 表示性别
- 文字,数值(标签):不能加减乘除
1.2 定序尺度
概念:又称顺序尺度,它是对事物之间等级或顺序差别的一种测度。
举例:成绩 (A, B, C) 、绩点、学历、年级等。
特征:
- 对事物可以分类、可以比较优劣和大小,
- 对应变量:次序变量
- 文字,数值(标签):不能加减乘除
1.3 定距尺度
概念:又称间隔尺度,是对事物类别或次序之间的间隔进行的一种测度。
举例:摄氏温度、年份等。
特征:
- 能分类、比较大小,计量差距
- 没有绝对零点,“0”表示“0”水平,不表示“没有”或“不存在”。
- 对应变量:定距变量
- 数值,可以加减,不能乘除
1.4 定比尺度
概念:也称比率尺度,是对事物之间比值的一种测度。
举例:成绩(0-100)、年龄、企业的产值利润等
特征:
- 分类、排序、比较大小、求出差异、计算两个数值之间的比率。
- 具有绝对零点,即数字 0 表示 “没有” 或 “不存在” 。
- 对应变量:定比变量
- 数值,可以加减乘除
1.5 四种计量尺度的比较
数字特征 | 定类尺度 | 定序尺度 | 定距尺度 | 定比尺度 |
---|---|---|---|---|
分类 == != |
True |
True |
True |
True |
排序 > < |
True |
True |
True |
|
间距 + - |
True |
True |
||
比值 * / |
True |
四种尺度所包含的信息量是依次递增的,级别由低到高。( 定类 < 定序 < 定距 < 定比 )
根据较高层次的计量尺度可以获得较低层次的计量尺度。
不同的尺度数据对应着不同数据显示方法和分析方法。
1.6 统计数据的类型
定性数据 ( qualitative data ) :由 定类 和 定序 尺度计量而成,反映事物的品质特征, 又称为属性数据。
定量数据 ( quantitative data ) :由 定距 和 定比 尺度计量而成,反映事物的数量特征。
图 举例:
定性数据:条形图、饼图
定量数据:直方图,线图,茎叶图
分析方法 举例
- 定性数据:频数,频率表,众数,列联表
- 定量数据:均值,方差,相应回归分析
2 特殊的数据类型:时间与日期
R 语言用了一种特殊的数据类型来表示日期和时间
- 日期用Date类来表示
- 时间则是由两个不同的类:
POS Xct
、POSIXIt
例如:查看当前日期和时间 date()
Sys.Date()
Sys.time()
1 | > date() |
CST
:英语全称为 Central Standard Time (USA) 、Central Standard Time (Australia)、China Standard Time 或 Cuba Standard Time 等四个地方。
2.1 日期 Date
- 日期不包括时间,只表示“某年某月某日”。
- 内部日期是以 1970年1月1日 至今的天数来存储。
2.1.1 as.Date() 函数基本使用
- 日期作为 Date 类对象来存储,在 R 里的工作方式是输入一个字符串,比如
'1970-01-01'
,然后用as.Date()
函数转换成日期。 as.Date()
方法默认传入字符串格式为'年(4位)-月(2位)-日(2位)'
;或者'年(4位)/月(2位)/日(2位)'
。
例如:
1 | > date1 <- as.Date("2025-03-25") |
2.1.2 unclass(Date) 计算日期差
因为 R 语言采用距离 1970年1月1日 的天数来存储日期,所以使用 unclass()
可以检查距离 1970/01/01/
相差的日期数。
1 | > unclass(as.Date("2025/03/25")) |
2.1.3 as.Date() 日期格式
默认格式:as.Date
函数的默认日期格式为 '年(4位)-月(2位)-日(2位)'
例如"2008-10-24"
自定义格式:
as.Date
函数支持通过 format
参数指定自定义日期格式。
符号 | 含义 | 示例 |
---|---|---|
%d |
数字表示的日期 | 01~31 |
%a |
缩写的星期名 | Mon |
%A |
非缩写星期名 | Monday |
%m |
月份(00-12) | 00~12 |
%b |
缩写的月份 | Jan |
%B |
非缩写月份 | January |
%y |
两位数的年份 | 07 |
%Y |
四位数的年份 | 2007 |
示例:
1 | as.Date("10/24/08", format="%m/%d/%y") |
2.1.4 日期计算
R 语言支持直接计算两个日期之间的差异,结果为 difftime
类型。
示例:
1 | T1 <- as.Date("October-24-2008", format="%B-%d-%Y") |
注意事项
- 如果日期字符串格式与
format
参数不匹配,as.Date
函数会返回NA
。- 确保日期格式化符号与日期字符串中的分隔符一致。
2.2 时间 Times
2.2.1 strptime() 函数
strptime()
函数用于将字符串解析为时间对象。其语法如下:
1 | strptime(x, format, tz = "") |
参数说明
x
: 表示时间的字符串。
例如:"October-7-2015 10:40:30"
,"December 9, 2011 9:10"
。format
: 转换格式,需与字符串格式对应。
例如:%B-%d-%Y %H:%M:%S
,%B %d, %Y %H:%M
。tz
: 表示时区,默认为当前时区。
例如:CST
(北京时区),GMT
(格林威治时间),UTC
(世界协调时间)。
格式化符号
符号 | 含义 | 示例 |
---|---|---|
%B |
英文全拼月份 | October |
%d |
第几天(01-31) | 07 |
%Y |
带世纪的年份 | 2015 |
%H |
小时(00-24) | 10 |
%M |
分钟(00-59) | 40 |
%S |
秒(00-61) | 30 |
示例代码
解析时间字符串
1 | > datestring <- c("10 7, 2015 10:40", "10 9, 2011 9:10") |
查看对象类型
1 | > class(x) |
注意事项
- 格式匹配:确保
format
参数与时间字符串的格式完全一致,否则会返回NA
。 - 时区设置:如果未指定
tz
参数,默认使用当前时区。 - 大小写敏感:格式化符号(如
%B
)区分大小写,需确保正确使用。
2.2.2 POSIXct 和 POSIXlt
R 语言中,时间用两种类型表示:POSIXct
和 POSIXlt
。
1. POSIXct
定义:时间用大整数表示,即从 1970 年 1 月 1 日至今的秒数。
特点:
- 适合存储在数据框中,因为它本质上是一个很大的整数向量。
- 适用于时间戳计算和存储。
示例:
1 | > time_ct <- as.POSIXct("2023-10-05 14:30:00") |
2. POSIXlt
定义:时间以列表形式存储,包含更多与时间相关的信息。
特点:
- 包含星期几、一年中的第几天、月份、日期等详细信息。
- 适合需要提取具体时间信息的场景。
示例:
1 | > time_lt <- as.POSIXlt("2023-10-05 14:30:00") |
提取具体信息:
1 | > print(time_lt$wday) # 星期几(0=周日,1=周一,...) |
2.2.3 类型转换
使用 as.POSIXct()
和 as.POSIXlt()
函数可以在 POSIXct
和 POSIXlt
之间进行转换。
示例
1 | > # 从 POSIXct 转换为 POSIXlt |
注意事项
时区问题:默认情况下,R 使用当前时区(如 CST
)。可以通过 tz
参数指定时区,例如:
1 | > as.POSIXct("2023-10-05 14:30:00", tz = "UTC") |
时间格式:确保时间字符串与 as.POSIXct()
或 as.POSIXlt()
的默认格式(%Y-%m-%d %H:%M:%S
)一致,否则需要指定 format
参数。
2.2.4 时间处理注意事项
as.POSIXlt()
函数用于将时间转换为 POSIXlt
类,该类以列表形式存储时间信息,便于提取具体的时间元素(如秒、分钟、小时等)。
1 | > # 获取当前时间 |
计算日期差
1 | > # 定义两个日期 |
比较日期大小
1 | > # 比较日期 |
只有同一类型的时间才可以比较计算等。