R:将一系列转换为矩阵,忽略遗骸

时间:2016-06-09 15:25:25

标签: r

Matlab可以完成这项任务。到目前为止,我无法使用matrix(),t()和reShape()。

我的目的是将一系列转换为固定10行的矩阵,列数根据数据系列的长度而变化。如果这些遗留下来,可以丢弃它们。

例如:

File "/home/ubuntu/workspace/fun.py", line 30                                                                                                                                                                                        
    if key.read() == 'ran: 1':                                                                                                                                                                                                         
                             ^                                                                                                                                                                                                         
SyntaxError: invalid syntax    

如果剩下任何遗骸(即41~49),则可以丢弃这些数据。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这就是我认为你要求的。任意长度和数据的向量。根据数据长度将nrow 10和ncol转换为矩阵。

#your series of arbitrary length
data = 1:49

#calculate number of columns based on length
col = as.integer(length(data)/10)

#max index
maxIndx = 10*col

#create and transpose matrix
yourMtx = t(matrix(data[0:maxIndx],col,10))

#your matrix
>      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    5    6    7    8
 [3,]    9   10   11   12
 [4,]   13   14   15   16
 [5,]   17   18   19   20
 [6,]   21   22   23   24
 [7,]   25   26   27   28
 [8,]   29   30   31   32
 [9,]   33   34   35   36
[10,]   37   38   39   40

#create reverse matrix
revMtx = yourMtx[,rev(seq_len(ncol(yourMtx)))]

#reverse matrix
>      [,1] [,2] [,3] [,4]
 [1,]    4    3    2    1
 [2,]    8    7    6    5
 [3,]   12   11   10    9
 [4,]   16   15   14   13
 [5,]   20   19   18   17
 [6,]   24   23   22   21
 [7,]   28   27   26   25
 [8,]   32   31   30   29
 [9,]   36   35   34   33
[10,]   40   39   38   37

答案 1 :(得分:0)

如果我理解你的问题,这看起来是你可以使用的方法。

# generate my series
myseries <- 1:49

# specify number of columns and rows
ncols <- 4
nrows <- 10

# create a matrix with the first ncols*nrows elements and fill by row

mymatrix <- matrix(myseries[1:(ncols*nrows)], 
                   ncol = ncols, nrow = nrows, byrow = TRUE)

 mymatrix
      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    5    6    7    8
 [3,]    9   10   11   12
 [4,]   13   14   15   16
 [5,]   17   18   19   20
 [6,]   21   22   23   24
 [7,]   25   26   27   28
 [8,]   29   30   31   32
 [9,]   33   34   35   36
[10,]   37   38   39   40