R语言 清洗数据

本文介绍了R语言中清洗数据的过程,包括处理缺失值、日期变量的转换和排序方法。讲解了as.Date、as.POSIXlt、strptime、strftime和format等函数在日期处理中的应用,以及sort、rank和order函数在数据排序中的用法。此外,还讨论了如何使用rbind和cbind合并数据集。

清洗数据是指对数据进行重新审查和校验的过程,目的在于删除重复信息,纠正存在的错误,并提供数据一致性。


处理缺失值

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
%H24小时制00-23
%I12小时制01-12
%pAM/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将数据缺失值放在前面
decreasingdecreasing = 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.methodties.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的自变量的高度(行数)应该与原数据框的高度相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值