R 机器学习 | 数据预处理
Posted 生信菜鸟团
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R 机器学习 | 数据预处理相关的知识,希望对你有一定的参考价值。
本文为 的姊妹篇 R 语言实现。
1. 变量名转换
•转换大小写:使用 toupper()
和 tolower()
函数•去除特殊符号,例如 .
,空格等:可用 gsub()
进行替换或 strsplit()
根据字符分割并提取字符串。
2. 数值离散化
所谓数值离散化就是把连续型数据转变成离散数据,比如把连续的收入值分为 $0~$10000、$10001~$25000、$25001~$50000、$50001~$75000、$75001~$100000 和 $100001~$150000。使用 cut()
函数可以很方便地进行这类操作。
cut(x, breaks, labels = NULL,
include.lowest = F, right = T, dig.lab = 3,
ordered_result = F)
•x
:数值向量•breaks
:指定分割点的数量的整数,或者制定分割点位置的向量•labels
:输出因子水平标签•include.lowest
:表明临界点是否包含在内•right
:表示区间是否左开右闭(当right = F,区间左闭右开)•dig.lab
:当产生标签时,标签有效数字•ordered_results
:返还值是否转换成有序因子
3. 日期处理
可用 lubridate
包处理日期和时间数据。
解析日期与时间
lubridate
包的 ymd()
系列函数来读取日期数据。y
,m
和 d
分别对应年、月和日。读取日期时,根据日期时间的元素顺序,选择相应的函数。例如,在下面的日期中,月份在首,其次是日,然后是年。所以用 mdy()
函数:
> mdy("12-01-2010")
[1] "2010-12-01 UTC"
要是顺序是日月年,那就得用 dmy()
函数:
> dmy("12-01-2010")
[1] "2010-01-12 UTC"
当然也有 ydm()
函数等等。
这些函数会自动识别日期中的分隔符,包括:-
,/
,.
和 ``(无分隔符)。
操作日期与时间
每个日期时间都是不同元素的组合,我们可调用不同的函数来提取对应信息。
4. 对分类数据进行编码
可用 car
包的 recode
函数将数值或者字符向量、factor 变量重新编码。
recode(var, recodes, as.factor, as.numeric=TRUE, levels)
•var
:为数值向量,字符向量或者 factor 变量•recodes
:为设定重新编码规则的字符串•as.factor
:如果 var
是一个 factor,则默认为TRUE,否则为 FALSE•as.numeric
:默认为 TRUE,当 as.factor = False
时输出结果指定为数字•levels
:指定新的编码分组的顺序(默认是按照分组名称排序)
x<-rep(1:3,3)
x
## [1] 1 2 3 1 2 3 1 2 3
recode(x, "c(1,2)='A';
else='B'")
## [1] "A" "A" "B" "A" "A" "B" "A" "A" "B"
Recode(x, "1:2='A'; 3='B'")
## [1] "A" "A" "B" "A" "A" "B" "A" "A" "B"
5. 合并数据集
可用 merge()
,cbind()
和 rbind()
来合并数据集。
merge()
:根据列名合并数据集
merge(x,y,by = , by.x = , by.y = , all = , all.x = , all.y = ,...)
•x
:第一个数据框•y
:第二个数据框•by
, by.x
, by.y
:指定两个数据框中匹配列名称。默认使用两个数据框中相同列名称•all
, all.x
, all.y
:指定合并类型的逻辑值。
另外还有,cbind()
根据列合并数据集以及 rbind()
根据行合并数据集,当然也可以用 dplyr
中的 join
等等。
6. 使用 dplyr
包进行数据操作
dplyr
也是我们常用于处理数据框的工具,例如:
•filter()
:按行筛选样本•select()
:按列选择变量•arrange()
:按给定的列名依次对行进行排序•mutate()
和 transmute()
:根据一个或多个变量生成新变量或重定义已有变量。mutate()
的返回结果会保留原有变量,而 transmute()
则只返回新变量。•distinct
:去重,仅返回无重复的行
7. 处理缺失数据
填充缺失值
可用 e1071
包中的 impute()
函数填充缺失值:
impute(x, what = c("median", "mean"))
what="median"
表示用对应列的中位数填充;what="mean"
表示用对应列的平均值填充。
impute()
返回的是一个矩阵,而不是一个数据框。所以我们必须多加一步,将结果转换回数据框的形式。
删除缺失值
可用 complete.cases()
函数判断数据框中没有缺失值的行,进一步进行删除。或者直接用 na.omit()
:
newdata<-na.omit(data)
newdata<-data[complete.cases(data),]
8. 特征缩放:z-score 标准化
stats
包中的 scale()
函数,可以用于缩放数值,使用平均值和标准差对数据集进行标准化。
scale(x, center = TRUE, scale = TRUE)
•x
:数据矩阵•center
:逻辑值或长度为 x
列数的数值向量,其中“类似数字”表示如果is.numeric(。)不正确,则as.numeric(。)将成功应用•scale
:逻辑值或长度为 x
列数的数值向量
center
的值确定如何执行列中心化。如果 center
是数字向量,则 x
的每一列都将减去相应值。如果 center
为 TRUE
,则通过减去 x
相应列的均值(省略 NA)来完成中心化,如果 center
为 FALSE
,则不进行中心化。
scale
的值确定中心化后如何执行列缩放。如果 scale
是一个数字向量,则 x
的每一列都将除以 scale
中的相应值。如果 scale
和 center
都为 TRUE
则缩放是将 x
除以它们的标准差。如果 scale
为 FALSE
,则不进行缩放。
所以默认情况下 scale(x)
就相当于 (x - mean(x)) / sd(x)
。
文末友情推荐
•《》•《》
以上是关于R 机器学习 | 数据预处理的主要内容,如果未能解决你的问题,请参考以下文章