R语言数据合并-cbind(),rbind

Python08

R语言数据合并-cbind(),rbind,第1张

rbind/cbind对数据合并的要求比较严格:合并的变量名必须一致;数据等长

cbind是根据列进行合并,合并的前提是所有数据行数相等。

 rbind是根据行进行合并,就是自动往下面顺延,但要求所有数据列数是相同的才能用rbind.

数据准备

向一个数值型向量中添加一个字符串会将此向量中的所有元素转换为字符型。

is.datatype()用于判断数据类型,返回值为TRUE或FALSE,常见类型包括数值型numeric、字符型character、逻辑型logical、数据框data.frame等。 as.datatype()可将数据类型进行转化。

查看数据类型:mode(), class(), typeof(), storage.mode()

逻辑值转换成数值时,TRUE转换成1,FALSE转换成0。

函数:order(x,decreasing=F,na.last=NA)

x是要排序的数据,可以是数据框也可以是向量,decreasing=F是默认升序,在排序变量前加一个减号可得到降序排序结果,na.last =NA表示将NA元素移到最后,否则,将NA放在第一个。

函数:cbind(A, B) ,不需要指定一个公共索引对数据框进行合并。

cbind:根据列进行合并,即叠加所有列,m列的矩阵与n列的矩阵cbind()最后变成m+n列,合并前提:cbind(a, c)中矩阵a、c的行数必需相符。

merge(A, B) :横向合并两个数据框(数据集),在多数情况下,两个数据框是通过一个或多个共有变量进行联结的(即一种内联结,inner join)。

rbind(A, B) :纵向合并两个数据框(数据集),两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。

rbind:根据行进行合并,就是行的叠加,m行的矩阵与n行的矩阵rbind()最后变成m+n行,合并前提:rbind(a, c)中矩阵a、c的列数必需相符。

函数:dataframe[row indices, column indices] dataframe为要索引的数据框,[]中,前面的是行,后面是列。

在某一列或行的下标之前加一个减号(-)就会剔除那一列或行。

subset(x, subset, select, drop = FALSE, ...)

x是要进行操作的数据框,subset是对数据的某些字段进行操作,select是选取要显示的字段。

sample(x, size, replace = FALSE, prob = NULL)

x表示所要抽样数据,size表示抽样元素个数,replace为T表示采取有重复的抽样,prob用于指定抽样的概率。

参考资料:

这是最后一篇讲解有关矩阵操作的博客,介绍有关矩阵的函数,主要有 rowSums() , colSums() , rowMeans() , colMeans() , apply() , rbind() , cbind() , row() , col() , rowsum() , aggregate() , sweep() , max.col() 。

下面通过例子来了解这些函数的用法:

我们知道,通过下标索引 [i, j] 可以访问矩阵的某一部分,索引如果没有提供意味着“所有行”或“所有列”。来看个例子,比如:

在R中,可以用一些特殊的函数来进行矩阵的行、列计算。来看些例子:

上述矩阵的行、列计算,还可以使用 apply() 函数来实现。 apply() 函数的原型为 apply(X, MARGIN, FUN, ...) ,其中: X 为矩阵或数组; MARGIN 用来指定是对行运算还是对列运算, MARGIN=1 表示对行运算, MARGIN=2 表示对列运算; FUN 用来指定运算函数; ... 用来指定 FUN 中需要的其它参数。来看些例子:

用 apply() 函数来实现上面的例子

apply() 函数功能很强大,我们可以对矩阵的行或列进行其它运算,例如:

如果矩阵存在 NA 值,可通过设置 na.rm=TRUE 来忽略 NA 值,然后再计算。比如:

甚至我们还可以自定义运算函数,来看个例子:

在R中, rbind() 和 cbind() 函数可分别为矩阵添加行和列,来看一个例子:

在R中, row() 和 col() 函数将分别返回元素的行和列下标矩阵,来看个例子:

通过这两个函数,可以获取矩阵的对角元素以及上下三角矩阵,例如:

有时,你可能需要对每行进行分组,然后组内每列求和。在R中可以用 rowsum() 函数来解决,而且效率也非常高。先看个例子:

你也可以用 aggregate() 函数获得类似结果:

有人就会问“为啥没有列分组求和的操作?”,其实你可以先将矩阵转置,然后行分组求和;这两步就等同于列分组求和。

sweep() 函数的原型为 sweep(x, MARGIN, STATS, FUN = "-", check.margin = TRUE, ...) ,其中: x 为矩阵或数组; MARGIN 用来指定是对行运算还是对列运算, MARGIN=1 表示对行运算, MARGIN=2 表示对列运算; STATS 表示想要清除的统计量; FUN 用来指定运算函数,默认为减法 - ; check.margin 用来核实 x 的维度是否与 STATS 的匹配,如果事先知道它们匹配的话,将其设为 FALSE 将提高运算速度; ... 用来指定 FUN 中需要的其它参数。来看些例子:

事实上,通过改变 FUN 参数的具体形式或自定义函数, sweep() 函数可以实现很多不同操作,这里就不细讲了。

max.col() 函数返回矩阵每行最大值所在的列位置(即列下标),其原型为 max.col(m, ties.method = c("random", "first", "last")) ,其中: m 为矩阵;当存在多个最大值时, ties.method 指定用哪种方式来处理这种情况,默认为"random"(随机),"first"指使用第一个最大值,"last"指使用最后一个最大值。来看个官网例子:

我们也可以结合 apply() 和 which.max() 函数来实现 max.col(mm, 'first') 。看个例子,

R矩阵的最后一部分内容就讲到这。

如若有遗漏,后期将会添加至本博客。