使用R, 将多个矩阵合并为一个矩阵, 合并时可以选择行扩展或列扩展的方式进行合并.
rbind, cbind不仅可以合并矩阵, 还可以合并数据框, 向量.
例如 :
行合并时, 如果长度不匹配, 会告警, 例如x是向量, 插入第一行(取4个值和矩阵列宽匹配).
列合并时, 如果长度不匹配, 会告警, 例如x是向量, 插入第一列(取3个值和矩阵行宽匹配).
如果是两个向量合并, 返回1个矩阵, 例如 :
如果是两个矩阵合并, 必须在合并时行或列宽匹配.
行合并, 将y逐行添加到x的下方. 所以y,x列宽必须相等
列合并, 将y逐列添加到x的右方. 所以y,x行宽必须相等
列合并时, 如果两个矩阵的行宽不相等, 报错.
调换矩阵参数顺序, 合并的顺序也调换.
[参考]
> x <- 1:10
> y <- matrix(1:12, 3, 4)
> x
[1] 1 2 3 4 5 6 7 8 9 10
> y
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
行合并时, 如果长度不匹配, 会告警, 例如x是向量, 插入第一行(取4个值和矩阵列宽匹配).
> rbind(x,y)
[,1] [,2] [,3] [,4]
x 1 2 3 4
1 4 7 10
2 5 8 11
3 6 9 12
Warning message:
In rbind(x, y) :
number of columns of result is not a multiple of vector length (arg 1)
列合并时, 如果长度不匹配, 会告警, 例如x是向量, 插入第一列(取3个值和矩阵行宽匹配).
> cbind(x,y)
x
[1,] 1 1 4 7 10
[2,] 2 2 5 8 11
[3,] 3 3 6 9 12
Warning message:
In cbind(x, y) :
number of rows of result is not a multiple of vector length (arg 1)
如果是两个向量合并, 返回1个矩阵, 例如 :
> z <- 2:11
> rbind(x,z)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x 1 2 3 4 5 6 7 8 9 10
z 2 3 4 5 6 7 8 9 10 11
> cbind(x,z)
x z
[1,] 1 2
[2,] 2 3
[3,] 3 4
[4,] 4 5
[5,] 5 6
[6,] 6 7
[7,] 7 8
[8,] 8 9
[9,] 9 10
[10,] 10 11
如果是两个矩阵合并, 必须在合并时行或列宽匹配.
> x <- matrix(1:12, 3,4)
> x
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> y <- matrix(2:13, 3,4)
> y
[,1] [,2] [,3] [,4]
[1,] 2 5 8 11
[2,] 3 6 9 12
[3,] 4 7 10 13
行合并, 将y逐行添加到x的下方. 所以y,x列宽必须相等
> rbind(x,y)
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
[4,] 2 5 8 11
[5,] 3 6 9 12
[6,] 4 7 10 13
列合并, 将y逐列添加到x的右方. 所以y,x行宽必须相等
> cbind(x,y)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 4 7 10 2 5 8 11
[2,] 2 5 8 11 3 6 9 12
[3,] 3 6 9 12 4 7 10 13
列合并时, 如果两个矩阵的行宽不相等, 报错.
> y <- matrix(1:16, 4,4)
> cbind(x,y)
Error in cbind(x, y) : number of rows of matrices must match (see arg 2)
> rbind(x,y)
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
[4,] 1 5 9 13
[5,] 2 6 10 14
[6,] 3 7 11 15
[7,] 4 8 12 16
调换矩阵参数顺序, 合并的顺序也调换.
> rbind(y,x)
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
[5,] 1 4 7 10
[6,] 2 5 8 11
[7,] 3 6 9 12
[参考]
1. help(rbind)
2. help(cbind)