在介绍了缺失值处理的方法之后,我们可以得到完整的数据集,但在进行数据分析之前,还需要对数据进行整理,下面我们将介绍数据整理的相关知识。
1.数据合并
我们在R语言基础语法教程中介绍了数据合并的一般方法,即利用函数cbind()和rbind()来进行合并,但这只是对数据进行简单的连接,且要求用于合并的数据集有相同的维数,否则R语言将会报错。在处理一些相对复杂的情况时,这两个函数显得不够实用,需要借助其他函数来实现,下面我们介绍更加“智能化”的函数merge(),该函数适用于合并含有共同的行或者列的两个数据集。其函数的基本书写格式为:
> merge(x,y, by = intersect (names(x), names(y)),by.x =by, by.y= by, all = FALSE,all.x = all,sort=TRUE, suffixes=c(".x" ,".y"), incomparables = NULL, ....)
参数介绍:
x, y:用子合并的两个数据框或其他数据对象;
by, by.x, by.y: 指定依据哪些行合并数据框,默认值为x、y中列名相同的列;
all, all.x, all.y:逻辑值,指定x和y的行是否全在输出文件中,默认值为FALSE;
Sort:逻辑值,指定参数by中的列是否需要排序,默认值为TRUE;
Sutlives:字符串向量,指定除参数by小中的列外相同列名的后缀;
Incomparables:指定参数by中哪些单元不进行合并,默认值为NULL。
需要注意的是,函数merge()只能对两个数据对象进行合并,而不能同时合并多个数据对象。下面我们通过实例演练进行详细介绍:
> a> b> a x1 x2A 1 6B 2 7c 3 8D 4 9E 5 10> b x1 x2 x3A 11 14 17B 12 15 18E 13 16 19> merge(a,b,all=T) x1 x2 x31 1 6 NA2 2 7 NA3 3 8 NA4 4 9 NA5 5 10 NA6 11 14 177 12 15 188 13 16 19
由于矩阵a和b的行数和列数都不相同,且指定所有数据都要合并,R语言采用列数较多的矩阵b的列名然后再将矩阵合并,用"NA"填补空格位置。
> c> c x1 x3A 1 5B 2 6D 3 7E 4 8> merge(a,c,all=T) x1 x2 x31 1 6 52 2 7 63 3 8 74 4 9 85 5 10 NA> merge(a,c) x1 x2 x31 1 6 52 2 7 63 3 8 74 4 9 8
上述代码中:我们创建一个新的矩阵c,将其与矩阵a合并,当指定所有数据合并时,输出一个5*3的矩阵,其中元素为矩阵a、c按列合并,空格位置用“NA”填补;如果不指定所有数据合并,则去掉含有缺失值的行后输出,
结果为4*3的矩阵。
如果两矩阵中出现相同的行元素,则函数merge还可以输出相同的行:
> d> d x1 x2A 1 6B 2