从多个列向量创建矩阵

sta*_*010 4 r dataframe

如何从多个列向量创建矩阵?

我知道我可以轻松地创建一个带有列向量的数据框:

> colA <- 1:5
> colB <- 21:25
> colC <- 31:35
> data.frame(colA, colB, colC)
  colA colB colC
1    1   21   31
2    2   22   32
3    3   23   33
4    4   24   34
5    5   25   35
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试时matrix(),它会给我意想不到的结果,如下所示.如何创建我想要的矩阵?我知道我能做到as.matrix(df),这很好地保留了列名,但我正在寻找一种更直接的方法.

> matrix(colA, colB, colC)
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
 [1,]    1    2    3    4    5    1    2    3    4     5     1     2     3
 [2,]    2    3    4    5    1    2    3    4    5     1     2     3     4
 [3,]    3    4    5    1    2    3    4    5    1     2     3     4     5
 [4,]    4    5    1    2    3    4    5    1    2     3     4     5     1
 [5,]    5    1    2    3    4    5    1    2    3     4     5     1     2
 [6,]    1    2    3    4    5    1    2    3    4     5     1     2     3
 [7,]    2    3    4    5    1    2    3    4    5     1     2     3     4
 [8,]    3    4    5    1    2    3    4    5    1     2     3     4     5
 [9,]    4    5    1    2    3    4    5    1    2     3     4     5     1
[10,]    5    1    2    3    4    5    1    2    3     4     5     1     2
[11,]    1    2    3    4    5    1    2    3    4     5     1     2     3
[12,]    2    3    4    5    1    2    3    4    5     1     2     3     4
[13,]    3    4    5    1    2    3    4    5    1     2     3     4     5
[14,]    4    5    1    2    3    4    5    1    2     3     4     5     1
[15,]    5    1    2    3    4    5    1    2    3     4     5     1     2
[16,]    1    2    3    4    5    1    2    3    4     5     1     2     3
[17,]    2    3    4    5    1    2    3    4    5     1     2     3     4
[18,]    3    4    5    1    2    3    4    5    1     2     3     4     5
[19,]    4    5    1    2    3    4    5    1    2     3     4     5     1
[20,]    5    1    2    3    4    5    1    2    3     4     5     1     2
[21,]    1    2    3    4    5    1    2    3    4     5     1     2     3
      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
 [1,]     4     5     1     2     3     4     5     1     2     3     4     5
 [2,]     5     1     2     3     4     5     1     2     3     4     5     1
 [3,]     1     2     3     4     5     1     2     3     4     5     1     2
 [4,]     2     3     4     5     1     2     3     4     5     1     2     3
 [5,]     3     4     5     1     2     3     4     5     1     2     3     4
 [6,]     4     5     1     2     3     4     5     1     2     3     4     5
 [7,]     5     1     2     3     4     5     1     2     3     4     5     1
 [8,]     1     2     3     4     5     1     2     3     4     5     1     2
 [9,]     2     3     4     5     1     2     3     4     5     1     2     3
[10,]     3     4     5     1     2     3     4     5     1     2     3     4
[11,]     4     5     1     2     3     4     5     1     2     3     4     5
[12,]     5     1     2     3     4     5     1     2     3     4     5     1
[13,]     1     2     3     4     5     1     2     3     4     5     1     2
[14,]     2     3     4     5     1     2     3     4     5     1     2     3
[15,]     3     4     5     1     2     3     4     5     1     2     3     4
[16,]     4     5     1     2     3     4     5     1     2     3     4     5
[17,]     5     1     2     3     4     5     1     2     3     4     5     1
[18,]     1     2     3     4     5     1     2     3     4     5     1     2
[19,]     2     3     4     5     1     2     3     4     5     1     2     3
[20,]     3     4     5     1     2     3     4     5     1     2     3     4
[21,]     4     5     1     2     3     4     5     1     2     3     4     5
      [,26] [,27] [,28] [,29] [,30] [,31]
 [1,]     1     2     3     4     5     1
 [2,]     2     3     4     5     1     2
 [3,]     3     4     5     1     2     3
 [4,]     4     5     1     2     3     4
 [5,]     5     1     2     3     4     5
 [6,]     1     2     3     4     5     1
 [7,]     2     3     4     5     1     2
 [8,]     3     4     5     1     2     3
 [9,]     4     5     1     2     3     4
[10,]     5     1     2     3     4     5
[11,]     1     2     3     4     5     1
[12,]     2     3     4     5     1     2
[13,]     3     4     5     1     2     3
[14,]     4     5     1     2     3     4
[15,]     5     1     2     3     4     5
[16,]     1     2     3     4     5     1
[17,]     2     3     4     5     1     2
[18,]     3     4     5     1     2     3
[19,]     4     5     1     2     3     4
[20,]     5     1     2     3     4     5
[21,]     1     2     3     4     5     1
Warning message:
In matrix(colA, colB, colC) :
  data length [5] is not a sub-multiple or multiple of the number of rows [21]
Run Code Online (Sandbox Code Playgroud)

jos*_*ber 7

您可以cbind用来生成所需的矩阵:

mat <- cbind(colA, colB, colC)
mat
#      colA colB colC
# [1,]    1   21   31
# [2,]    2   22   32
# [3,]    3   23   33
# [4,]    4   24   34
# [5,]    5   25   35
class(mat)
# [1] "matrix"
Run Code Online (Sandbox Code Playgroud)

你不明白你用的呼唤期待矩阵matrix(colA, colB, colC),因为你的论点越来越解释为第一,第二和第三个参数的matrix函数(又名data,nrowncol).如果您想使用矩阵函数,则需要将您的数据作为单个参数提供,例如mat <- matrix(c(colA, colB, colC), ncol=3).如果您使用此语法,则不会像我们一样从变量中获取列名cbind.