清洗数据是指对数据进行重新审查和校验的过程,目的在于删除重复信息,纠正存在的错误,并提供数据一致性。
处理缺失值
R提供了一些函数,用于缺失值检测和缺失值处理:
| 函数 | 描述 |
|---|---|
| is.na(x) | 返回一个与x等长的逻辑向量,并且由相应位置的元素是否是NA来决定这个逻辑向量相应位置的元素是TRUE还是FALSE。TRUE表示该位置的元素是缺失值 |
| anyNA(x,recursive = FALSE) | 判断数据中是否存在缺失值,返回TRUE或FALSE值。若存在缺失值则返回FALSE |
| na.omit(x) | 删除含有缺失值的观测 |
| complete.cases(x) | 返回一个逻辑向量,不存在缺失值的行的值为TRUE,存在缺失值的行的值为FALSE |
示例:
score <- data.frame(student = c("A","B","C","D"),
gender = c("M","M","F","F"),
math = c(90,70,80,60),
Eng = c(88,78,69,98),
p1 = c(66,59,NA,88)) # 创建数据框
anyNA(score) # 判断score中是否存在缺失值,返回TRUE或FALSE值。若存在缺失值则返回FALSE
# 运行结果:
# [1] TRUE
is.na(score)
# 运行结果:
# student gender math Eng p1
# [1,] FALSE FALSE FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE FALSE FALSE
# [3,] FALSE FALSE FALSE FALSE TRUE
# [4,] FALSE FALSE FALSE FALSE FALSE
complete.cases(x)
# 运行结果:
# [1] TRUE TRUE FALSE TRUE
score[complete.cases(score),]
# 运行结果:
# student gender math Eng p1
# 1 A M 90 88 66
# 2 B M 70 78 59
# 4 D F 60 98 88
na.omit(score)
# 运行结果:
# student gender math Eng p1
# 1 A M 90 88 66
# 2 B M 70 78 59
# 4 D F 60 98 88
处理日期变量
示例:
Sys.Date()
# 运行结果:
# [1] “2020-04-09”
Sys.time()
# 运行结果:
# [1] “2020-04-09 09:29:32 CST”
date()
# 运行结果:
# [1] “Wed Mar 25 09:30:01 2020”
读入日期的格式
| 符号 | 含义 | 示例 |
|---|---|---|
| %d | 数字表示的日期(00~31) | 01~31 |
| %a | 缩写的星期名 | Mon |
| %A | 非缩写的星期名 | Monday |
| %w | 数字表示的星期天数 | 0-6,周日为0 |
| %m | 数字表示的月份(00~12) | 00~12 |
| %b | 缩写的月份 | Jan |
| %B | 非缩写的月份 | January |
| %y | 二位数的年份 | 20 |
| %Y | 四位数的年份 | 2020 |
| %H | 24小时制 | 00-23 |
| %I | 12小时制 | 01-12 |
| %p | AM/PM指示 | AM/PM |
| %M | 十进制的分数 | 00-60 |
| %S | 十进制的秒 | 00-60 |
as.Date函数
as.Date函数可以将字符串形式的日期值转换为日期变量
| 参数 | 描述 |
|---|---|
| x | 要转换的对象,为字符型数据 |
| format | 用于读入日期的适当格式 |
| … |
as.Date函数只能转换包含年月日星期的字符串,无法转换具体到时间的字符串
as.POSIXIt函数 as.POSIXIt(x,tz="",format)
| 参数 | 描述 |
|---|---|
| x | 想要转换的字符串型日期时间值 |
| tz | 指定转换后的时区 |
| format | 指定要转换的日期值的格式 |
strptime函数 strptime(x,format,tz="")
| 参数 | 描述 |
|---|---|
| x | 字符型数据 |
| format | 指定要转换的日期值的格式 |
| tz | 指定时区 |
| … |
strftime函数 strftime(x,format="")
# 转化日期时间变量为字符串
# 使用上例的结果
x
# 运行结果:
# [1] "2020-02-28 10:07:52 CST" "2020-08-07 19:33:02 CST"
# 输出的格式转换为format指定的格式
strftime(x,format = "%Y/%m/%d")
# 运行结果:
# [1] "2020/02/28" "2020/08/07"
注意:strftime函数的与strptime函数相对应,strftime函数用于将时间变量按指定的格式转换为字符型日期值
format函数 format(x,…)
# 使用format()函数转换为字符串
# 使用和上例的同样的数据
x
# 运行结果:
# [1] "2020-02-28 10:07:52 CST" "2020-08-07 19:33:02 CST"
# 输出的格式转换为format定义的格式
format(x,"%d/%m/%Y")
# 运行结果:
# [1] ”28/02/2020“ ”07/08/2020“
注意:format函数不仅限于将日期变量按格式转化为字符串,也可以将其他类型的变量转化为字符串
数据排序
R中涉及排序的基本函数有sort、rank和order函数。其基本用法为:
- sort(x,na.last = NA, decreasing = FALSE, …)
- order(…, na.last = TRUE, decreasing = FALSE)
- rank(x, na.last = TRUE, ties.method = c(“average”,“first”,“random”,“max”,“min”))
x表示需要排序的数据,decreasing表示是否按降序排序数据,method表示所使用的排序算法,na.last用来说明如何处理NA值,如果为FALSE,则会删除这些值,如果为TRUE,就会把这些值放到最后
sort函数:对向量进行排序,返回的结果是经过排序后的向量
| 参数 | 描述 |
|---|---|
| x | 表示需要排序的数据集 |
| na.last | 设定对数据集中缺失值的处理,na.last=NA(默认)表示在排序结果中缺失值将被删除。na.last=TRUE表示将数据缺失值放在最后,na.last=FALSE表示j将数据缺失值放在前面 |
| decreasing | decreasing = FALSE表示按从小到大的顺序进行排序, decreasing = TRUE表示按从大到小的顺序排序 |
rank函数:对向量进行排序,返回的结果是经过排序后的秩次
rank(x,na.last=TRUE,ties.method=c(“average”,“first”,“random”,“max”,“min”))
| 参数 | 描述 |
|---|---|
| x | 表示需要排序的数据集 |
| na.last | 设定对数据集中缺失值的处理,na.last=NA(默认)表示在排序结果中缺失值将被删除。na.last=TRUE表示将数据缺失值放在最后,na.last=FALSE表示j将数据缺失值放在前面 |
| ties.method | ties.method用于设定对数据集中重复数据的秩的处理方式, ties.method = "average"表示对重复数据的秩取平均值作为这几个数据共同的秩, ties.method = "first"表示重复数据中的位于前面的数据的秩取小,位于后面的依次递增, ties.method = "random"表示随机定义重复数据的秩, ties.method = "max"表示以重复数据可能对应的最大秩作为这几个数据共同的秩, ties.method = "min"表示以重复数据可能对应的最小秩作为这几个数据共同的秩 |
order函数
- order函数的功能为对数据进行排序,返回值为最小(大)值、次小(大)值…次大(小)值、最大(小)值所在的位置
- order(x,na.last=TRUE,decreasing=FALSE)
- x和na.last参数含义同sort函数
- 与前面两个排序函数不同的是,order函数可以对数据框进行排序
- 其中对数据集data.frame按变量v1,v2进行排序的实现形式为:
data.frame[order(data.frame $ v1, data.frame $ v2)] - 若v1一样,则按v2升序排序,如果要将升序改为降序,只需在变量前添加符号或decreasing = TRUE
合并数据集
数据框的编辑可以通过rbind和cbind函数。需要注意的是,使用rbind和cbind函数对于数据框而言,分别为增加新的样本数据和增加新属性变量。
rbind的自变量的宽度(列数)应该与原数据框的宽度相等,cbind的自变量的高度(行数)应该与原数据框的高度相等。
本文介绍了R语言中清洗数据的过程,包括处理缺失值、日期变量的转换和排序方法。讲解了as.Date、as.POSIXlt、strptime、strftime和format等函数在日期处理中的应用,以及sort、rank和order函数在数据排序中的用法。此外,还讨论了如何使用rbind和cbind合并数据集。

3904

被折叠的 条评论
为什么被折叠?



