需要将多个向量转换为R中的矩阵

时间:2018-08-07 02:25:56

标签: r dplyr data.table

我有一个包含许多列的矩阵。我想将每一列都转换为较小的矩阵,并将其附加以创建新的矩阵

下面是给定的数据

A1   B1   C1   
1    9    17   
2    10   18   
3    11   19   
4    12   20   
5    13   21   
6    14   22   
7    15   23   
8    16   24   

应更改为

1    5
2    6
3    7
4    8
9    13
10   14
11   15
12   16
17   21
18   22
19   23
20   24

我举了一个小例子。但是我的数据中确实有大量的列。我想知道如何通过编写一个函数/循环来实现这一点

2 个答案:

答案 0 :(得分:2)

您可以cbind顶行和底行:

> cbind(c(x[1 : (nrow(x)/2), ]), c(x[(nrow(x)/2 + 1) : nrow(x), ]))
      [,1] [,2]
 [1,]    1    5
 [2,]    2    6
 [3,]    3    7
 [4,]    4    8
 [5,]    9   13
 [6,]   10   14
 [7,]   11   15
 [8,]   12   16
 [9,]   17   21
[10,]   18   22
[11,]   19   23
[12,]   20   24

,其中x是输入矩阵。

答案 1 :(得分:1)

在遍历该列之后,将该列转换为具有n行(即4行2列)的matrixrbind list元素以创建{{1} }

matrix

请注意,如果输入为矩阵,则可以使用# if the input is data.frame do.call(rbind, lapply(df1, matrix, ncol=2, nrow = 4)) # [,1] [,2] # [1,] 1 5 # [2,] 2 6 # [3,] 3 7 # [4,] 4 8 # [5,] 9 13 # [6,] 10 14 # [7,] 11 15 # [8,] 12 16 # [9,] 17 21 #[10,] 18 22 #[11,] 19 23 #[12,] 20 24 (对于data.frame)将其转换为as.data.frame

lapply

df1 <- as.data.frame(df1) 遍历数据集的列并返回lapplylist

vector

通过调用lapply(df1, I) #$A1 #[1] 1 2 3 4 5 6 7 8 #$B1 #[1] 9 10 11 12 13 14 15 16 #$C1 #[1] 17 18 19 20 21 22 23 24 并指定行数(vector,将这些matrix更改为dim(矩阵是具有matrix属性的向量) }),列数(nrow

ncol

现在,我们有了lapply(df1, matrix, nrow = 4, ncol = 2) #$A1 # [,1] [,2] #[1,] 1 5 #[2,] 2 6 #[3,] 3 7 #[4,] 4 8 #$B1 # [,1] [,2] #[1,] 9 13 #[2,] 10 14 #[3,] 11 15 #[4,] 12 16 #$C1 # [,1] [,2] #[1,] 17 21 #[2,] 18 22 #[3,] 19 23 #[4,] 20 24 个矩阵,然后将它们与list绑定在一起(行绑定)以创建单个rbind

matrix包裹(如果需要data.frame)

as.data.frame

如果输入是矩阵

as.data.frame(do.call(rbind, lapply(df1, matrix, ncol=2, nrow = 4)))

注意:当行和列更多时,这会更普遍