Author: Team BioSakshat

Last update: June 2017

Copyright © 2017 BioSakshat, Inc. All rights reserved.

Matrix

Create a matrix from vector using dim attributes

x=21:70;
dim(x)=c(10,5); # 10 row, 5 col
x;
##       [,1] [,2] [,3] [,4] [,5]
##  [1,]   21   31   41   51   61
##  [2,]   22   32   42   52   62
##  [3,]   23   33   43   53   63
##  [4,]   24   34   44   54   64
##  [5,]   25   35   45   55   65
##  [6,]   26   36   46   56   66
##  [7,]   27   37   47   57   67
##  [8,]   28   38   48   58   68
##  [9,]   29   39   49   59   69
## [10,]   30   40   50   60   70

Create matrix using matrix()

x=21:70;
matrix(x, ncol=10); # 10 col
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]   21   26   31   36   41   46   51   56   61    66
## [2,]   22   27   32   37   42   47   52   57   62    67
## [3,]   23   28   33   38   43   48   53   58   63    68
## [4,]   24   29   34   39   44   49   54   59   64    69
## [5,]   25   30   35   40   45   50   55   60   65    70
m=matrix(x, ncol=10, byrow = TRUE); # Fill elements row wise

Functions that can be applied to a matrix

# Data structure of m
str(m); 
##  int [1:5, 1:10] 21 31 41 51 61 22 32 42 52 62 ...
# Dimension of m
dim(m);
## [1]  5 10
# Number of rows
nrow(m);
## [1] 5
# Number of columns
ncol(m);
## [1] 10
# Column means
colMeans(m);
##  [1] 41 42 43 44 45 46 47 48 49 50
# Row means
rowMeans(m);
## [1] 25.5 35.5 45.5 55.5 65.5
# Transpose
t(m);
##       [,1] [,2] [,3] [,4] [,5]
##  [1,]   21   31   41   51   61
##  [2,]   22   32   42   52   62
##  [3,]   23   33   43   53   63
##  [4,]   24   34   44   54   64
##  [5,]   25   35   45   55   65
##  [6,]   26   36   46   56   66
##  [7,]   27   37   47   57   67
##  [8,]   28   38   48   58   68
##  [9,]   29   39   49   59   69
## [10,]   30   40   50   60   70
# Fetch column names
colnames(m);
## NULL
# Fetch row names
rownames(m);
## NULL
# head
head(m);
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]   21   22   23   24   25   26   27   28   29    30
## [2,]   31   32   33   34   35   36   37   38   39    40
## [3,]   41   42   43   44   45   46   47   48   49    50
## [4,]   51   52   53   54   55   56   57   58   59    60
## [5,]   61   62   63   64   65   66   67   68   69    70

Assign column/row names

colnames(m)=paste("C",1:ncol(m),sep="");
rownames(m)=paste("R",1:nrow(m),sep="");
m;
##    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
## R1 21 22 23 24 25 26 27 28 29  30
## R2 31 32 33 34 35 36 37 38 39  40
## R3 41 42 43 44 45 46 47 48 49  50
## R4 51 52 53 54 55 56 57 58 59  60
## R5 61 62 63 64 65 66 67 68 69  70

Fetch elements from a matrix using indices

m;
##    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
## R1 21 22 23 24 25 26 27 28 29  30
## R2 31 32 33 34 35 36 37 38 39  40
## R3 41 42 43 44 45 46 47 48 49  50
## R4 51 52 53 54 55 56 57 58 59  60
## R5 61 62 63 64 65 66 67 68 69  70
# 1st row, 3rd column
m[1,3];
## [1] 23
# 1st tp 3rd row and 3rd to 5th column
m[c(1:3),c(3:5)];
##    C3 C4 C5
## R1 23 24 25
## R2 33 34 35
## R3 43 44 45
# 1st row
m[1,];
##  C1  C2  C3  C4  C5  C6  C7  C8  C9 C10 
##  21  22  23  24  25  26  27  28  29  30
# 3rd column
m[,3];
## R1 R2 R3 R4 R5 
## 23 33 43 53 63
# 3rd element. Here matrix is converted to vector and 3rd element is returned
m[3];
## [1] 41

Fetch element using index matrix

m;
##    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
## R1 21 22 23 24 25 26 27 28 29  30
## R2 31 32 33 34 35 36 37 38 39  40
## R3 41 42 43 44 45 46 47 48 49  50
## R4 51 52 53 54 55 56 57 58 59  60
## R5 61 62 63 64 65 66 67 68 69  70
index=c(2,3,3,4,4,5);
m[index]
## [1] 31 41 41 51 51 61

Fetch elements from a matrix using row and column names

m;
##    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
## R1 21 22 23 24 25 26 27 28 29  30
## R2 31 32 33 34 35 36 37 38 39  40
## R3 41 42 43 44 45 46 47 48 49  50
## R4 51 52 53 54 55 56 57 58 59  60
## R5 61 62 63 64 65 66 67 68 69  70
m["R1","C3"];
## [1] 23

Insert rows and columns by rbind() and cbind()

m1=matrix(1:10, nrow=5);
m1;
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
m1=rbind(m1, 999);
m1;
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
## [6,]  999  999
m1=rbind(m1, c(2,3));
m1;
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
## [6,]  999  999
## [7,]    2    3
m1=cbind(m1, 1:5);
## Warning in cbind(m1, 1:5): number of rows of result is not a multiple of
## vector length (arg 2)
m1;
##      [,1] [,2] [,3]
## [1,]    1    6    1
## [2,]    2    7    2
## [3,]    3    8    3
## [4,]    4    9    4
## [5,]    5   10    5
## [6,]  999  999    1
## [7,]    2    3    2
m1=cbind(m1, 10:20);
## Warning in cbind(m1, 10:20): number of rows of result is not a multiple of
## vector length (arg 2)
m1;
##      [,1] [,2] [,3] [,4]
## [1,]    1    6    1   10
## [2,]    2    7    2   11
## [3,]    3    8    3   12
## [4,]    4    9    4   13
## [5,]    5   10    5   14
## [6,]  999  999    1   15
## [7,]    2    3    2   16

Create matrix using rbind() and cbind()

x=seq(2, 4, length=10);
y=1:10;
x;
##  [1] 2.000000 2.222222 2.444444 2.666667 2.888889 3.111111 3.333333
##  [8] 3.555556 3.777778 4.000000
y;
##  [1]  1  2  3  4  5  6  7  8  9 10
cbind(x,y);
##              x  y
##  [1,] 2.000000  1
##  [2,] 2.222222  2
##  [3,] 2.444444  3
##  [4,] 2.666667  4
##  [5,] 2.888889  5
##  [6,] 3.111111  6
##  [7,] 3.333333  7
##  [8,] 3.555556  8
##  [9,] 3.777778  9
## [10,] 4.000000 10
rbind(x,y);
##   [,1]     [,2]     [,3]     [,4]     [,5]     [,6]     [,7]     [,8]
## x    2 2.222222 2.444444 2.666667 2.888889 3.111111 3.333333 3.555556
## y    1 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000
##       [,9] [,10]
## x 3.777778     4
## y 9.000000    10

Delete row(s) and column(s)

m;
##    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
## R1 21 22 23 24 25 26 27 28 29  30
## R2 31 32 33 34 35 36 37 38 39  40
## R3 41 42 43 44 45 46 47 48 49  50
## R4 51 52 53 54 55 56 57 58 59  60
## R5 61 62 63 64 65 66 67 68 69  70
m=m[-1,];
m;
##    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10
## R2 31 32 33 34 35 36 37 38 39  40
## R3 41 42 43 44 45 46 47 48 49  50
## R4 51 52 53 54 55 56 57 58 59  60
## R5 61 62 63 64 65 66 67 68 69  70
m=m[,-3];
m;
##    C1 C2 C4 C5 C6 C7 C8 C9 C10
## R2 31 32 34 35 36 37 38 39  40
## R3 41 42 44 45 46 47 48 49  50
## R4 51 52 54 55 56 57 58 59  60
## R5 61 62 64 65 66 67 68 69  70

Check for matrix

is.matrix(m);
## [1] TRUE

Conditional statements on matrix

m;
##    C1 C2 C4 C5 C6 C7 C8 C9 C10
## R2 31 32 34 35 36 37 38 39  40
## R3 41 42 44 45 46 47 48 49  50
## R4 51 52 54 55 56 57 58 59  60
## R5 61 62 64 65 66 67 68 69  70
m%%5==0;
##       C1    C2    C4   C5    C6    C7    C8    C9  C10
## R2 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## R3 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## R4 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
## R5 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE
which(m%%5==0, arr.ind = TRUE);
##    row col
## R2   1   4
## R3   2   4
## R4   3   4
## R5   4   4
## R2   1   9
## R3   2   9
## R4   3   9
## R5   4   9

Task: Now Go to Task page and finish Matrix