上一节讲到R数据清洗内容,主要包括缺失值处理、特殊字符处理、大小写转换、数据格式转化、重复值处理、数值替换,本节在R数据清洗的内容上继续学习R数据预处理,内容包括数据合并(横向合并、纵向合并),自定义排序等内容,下面一起学习。
示例工具:R x64 3.5.3、RStudio
本文讲解内容:数据预处理
适用范围:数据合并、自定义排序
1 数据合并
数据合并这里主要有三种方法进行合并,包括数据表的纵向合并、横向合并以及增加新字段的方法,将多个小表合并为一个大表。
1.1 纵向合并
纵向合并的意思就是在数据表的后面追加新的行记录,比如在EXCEL中使用复制粘贴功能往下增加新的行记录,在R中使用rbind()函数来纵向合并,这里首先构建一个data数据表,数据表内容如下。
#手动创建数据表data data<-da(ID=c("c001","c002","c003","c004","c005","c006","c007","c008","c009","c010"), NAME=c("Rmesh","Khilan","Kaushik","Chaitali","Hardik","Komal","Tom","Muffy","Susan","Kevin"), AGE=c(23,20,23,25,27,24,26,31,26,30), ADDRESS=c("Ahmed","Delhi","Kota","Mumbai","Bhopal","MP-A","MP-B","Indore","JP-No.1","JP-No.2"), SAL=c(2000,1500,2000,5000,8500,6500,5500,9500,7000,9000))
然后构建一个data1数据表,数据表如下。
#手动创建数据表data1 data1<-da(ID=c("c011","c012"), NAME=c("Ami","Dave"), AGE=c(30,28), ADDRESS=c("Ahmed","Delhi"), SAL=c(8500,8000))
使用rbind函数,将data和data1两个数据表纵向合并起来。
#合并数据表 data<-rbind(data,data1)
1.2 横向合并
横向合并类似于EXCEL中的VLOOKUP函数的用法,在R中使用merge()函数进行横向合并,创建一个新的数据表data2,包含ID、GENDER和LEVEL三个字段。
#手动创建数据表data2 data2<-da(ID=c("c001","c002","c003","c004","c005","c006","c007","c008","c009","c010"), GENDER=c("female","female","male","female","female","male","male","male","female","male"), LEVEL=c("Bachelor","Bachelor","Bachelor","Bachelor","Master","Master","Bachelor","Doctorate","Master","Doctorate"))
使用merge函数将data和data2两个数据表横向合并,合并的方式为inner,该方法将两个数据表中共有的数据匹配到一起生成新的数据表,这里共有的字段是ID。
#数据表合并 inner模式 data<-merge(data,data2,by='ID')
除了inner方式以外,合并的方式还有left、right和outer方式。
#数据表合并 left模式 data<-merge(data,data2,all.x=TRUE,by='ID')
数据表合并后,可以重置数据表的索引,默认状态下索引是从1开始向下排列。
这里使用rownames()函数,将ID这一列设置为索引列。
#设置索引列 rownames(data)=data$ID
1.3 增加新字段
增加新字段也可以实现表的合并,要增加新字段可以将现有的字段进行合并,或者通过现有字段进行计算后生成新字段,字段合并首先用paste()函数将两个字段合并为一个字段,然后使用cbind()函数合并到数据表。
#合并两个字段的内容 ID_NAME<-paste(data$ID,data$NAME) data=cbind(data,ID_NAME)
另一种方法是对数据表中的字段进行计算,产生新的字段,首先计算SAL的平均值,保留两位小数,结果如下。
#计算新字段并合并 AVG_SAL=round(mean(data$SAL),digits = 2)
然后,使用cbind函数将计算字段合并到表。
#计算新字段并合并 data=cbind(data,AVG_SAL)
2 自定义排序
2.1 降序排列
在R中使用order函数进行排序,这里对SAL列进行排序,当decreasing为TRUE时表示降序排序。
2.2 升序排列
若省略decreasing参数,默认为正序排序。
#对数据表按SAL列进行排序(正序) data[order(data$SAL),]
2.3 自定义排列
也可以同时对数据表中的多列进行排序,这里对SAL和AGE两列降序排列。
#对多列进行排序 data[order(data$SAL,data$AGE,decreasing = TRUE),]