A dataset is usually a rectangular array of data with rows representing observations and columns representing variables.

There are different objects in R to store data, we call them data structures.

We have 6 major data structures in R which is as listed below.

It is one dimensional array.

It can store numerical, character, logical or complex data.

We use `c( )`

to form a vector.

Vectors can store only one type of data at a time. We can have either a numerical vector or a character vector or a logical vector etc. We can never have a vector which have character and numerical data at the same time.

Let’s now learn how to create vectors with the help of examples.

In this example we are creating a numerical vector v1 with elements 1, 9, 10, -5 and -4.

```
v1<- c(1,9,10,-5,-4)
v1
```

`[1] 1 9 10 -5 -4`

In this example we are creating a numerical vector `v2`

with elements 1,2,3,4,5,6,7,8,9,10

```
v2<- c(1:10)
v2
```

` [1] 1 2 3 4 5 6 7 8 9 10`

In this example we are creating a character vector `v3`

with elements a,b,c,d and e

```
v3<- c("a","b","c","d","e")
v3
```

`[1] "a" "b" "c" "d" "e"`

In this example we are creating a character vector `v4`

with elements a,b,c,d and e

```
v4<- c("Ajay","Amit","Sujit","Mantosh")
v4
```

`[1] "Ajay" "Amit" "Sujit" "Mantosh"`

In this example we are creating a logical vector `v5`

with elements TRUE, FALSE, TRUE, TRUE and FALSE.

```
v5<- c(TRUE, FALSE, TRUE, TRUE, FALSE)
v5
```

`[1] TRUE FALSE TRUE TRUE FALSE`

In this example we are creating a logical vector `v6`

with elements T, F, F, T and F,

```
v6<- c(T, F, F, T ,F)
v6
```

`[1] TRUE FALSE FALSE TRUE FALSE`

We can clearly see that the type of elements is not same. There are few integers and few characters. If we try to make a vector then it will be automatically be created as a `character vector`

.

```
v7<- c(1,2,"a","b","c")
v7
```

`[1] "1" "2" "a" "b" "c"`

`class(v7)`

`[1] "character"`

[ ] brackets are used for indexing.

We have already created seven vectors v1, v2, v3, v4, v5, v6 and v7 in above examples. We will use the same to understand vector indexing.

`v1`

`[1] 1 9 10 -5 -4`

To find the element at first position we write,

`v1[1]`

`[1] 1`

To find the element at secong position we write,

`v1[2]`

`[1] 9`

To find the element at third position we write,

`v1[3]`

`[1] 10`

To find the element at forth position we write,

`v1[4]`

`[1] -5`

To find the element at fifth position we write,

`v1[5]`

`[1] -4`

To find the elements at first and fifth position of v1, we write,

`v1[c(1,5)]`

`[1] 1 -4`

To find the elements at first, third and fifth position of v1, we write,

`v1[c(1,3,5)]`

`[1] 1 10 -4`

```
# Antother way of Indexing is
v1[c(T,F,T,F,T)]
```

`[1] 1 10 -4`

```
# Another way of Indexing is
v1[c(-2,-4)]
```

`[1] 1 10 -4`

`v2`

.- Element at \(1^{st}\) position.

- Element at \(2^{nd} \text{ and } 5^{th}\) position.

- Element at \(3^{rd}, 4^{th} \text{ and } 5^{th}\) position.

```
# Solution (i):
v2[1]
```

`[1] 1`

```
# Solution (ii):
v2[c(2,5)]
```

`[1] 2 5`

```
# Solution (iii):
v2[c(3:5)]
```

`[1] 3 4 5`

`v3`

.- Element at \(2^{nd}\) position.

- Element at \(1^{st} \text{ and } 5^{th}\) position.

- Element at \(1^{st}, 4^{th} \text{ and } 5^{th}\) position.

```
# Solution (i):
v3[2]
```

`[1] "b"`

```
# Solution (ii):
v3[c(1,5)]
```

`[1] "a" "e"`

```
# Solution (iii):
v3[c(1,4,5)]
```

`[1] "a" "d" "e"`

It is `two dimensional`

array

It can store numerical, character or logical data but for a single matrix, all elements should have same type.

We use `matrix( )`

to form a matrix.

DEFAULT OPTIONS –

Data is arranged column wise.

Names of dimensions is set as NULL.

The same colour of every block represent that it can store one type of data.

This matrix have 4 rows and 5 columns. We call it 4 by 5 matrix.

```
m1<- matrix(c(1:20), nrow = 4, ncol = 5)
m1
```

```
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
```

In the above example we can see that the elements are arranged `column wise`

. If we want to arrange the elements row wise then we have to use `byrow = TRUE`

argument.

Let’s see it in action.

```
m2<- matrix(c(1:20), nrow = 4, ncol = 5, byrow = TRUE)
m2
```

```
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
```

Let’s give the name to dimensions. Rather then [,1], [,2], [,3], [,4] and [,5] as default column name we will name them col1, col2, col3, col4 and col5 and for rows we will use names row1, row2, row3 and row4.

```
# Creating vectors of column names and rownames.
namescolumn<- c("col1", "col2", "col3", "col4", "col5")
namesrow<- c("row1", "row2", "row3", "row4")
# Giving dimension names to matrix m1.
dimnames(m1) <- list(namesrow, namescolumn)
# Checking matrix now and this time we will see the named dimensions.
m1
```

```
col1 col2 col3 col4 col5
row1 1 5 9 13 17
row2 2 6 10 14 18
row3 3 7 11 15 19
row4 4 8 12 16 20
```

```
m3<- matrix(c(11:20),5,2,byrow = T)
m3
```

```
[,1] [,2]
[1,] 11 12
[2,] 13 14
[3,] 15 16
[4,] 17 18
[5,] 19 20
```

```
m4<- matrix(c(11:25),3,5,dimnames = list(c("r1","r2","r3"),c("c1","c2","c3","c4","c5")))
m4
```

```
c1 c2 c3 c4 c5
r1 11 14 17 20 23
r2 12 15 18 21 24
r3 13 16 19 22 25
```

We already know, matrix have two dimensions - rows and columns.

In below image, you will see a matrix `mat1`

which is a 3 by 3 matrix where we have represented rows by blue and column by red colours.

If we want to find element 6 by indexing, then we need to see which row and which column intersects to give 6 as output. In this case it is \(2^{nd}\) row and \(3^{rd}\) column. We write it as shown `mat1[2,3]`

which will give us `6`

as output.

`m1[2,3]`

.We have already created this matrix. Let’s check it out.

`m1`

```
col1 col2 col3 col4 col5
row1 1 5 9 13 17
row2 2 6 10 14 18
row3 3 7 11 15 19
row4 4 8 12 16 20
```

Here, we want to find element at \(2^{nd}\) row and \(3^{rd}\) column. Let’s see what’s the answer.

FIRST METHOD - By using default dimensions.

`m1[2,3]`

`[1] 10`

SECOND METHOD - By using Dimension Names.

`m1["row2","col3"]`

`[1] 10`

`m1[3,]`

```
col1 col2 col3 col4 col5
3 7 11 15 19
```

`m1[,4]`

```
row1 row2 row3 row4
13 14 15 16
```

`m2[3,2]`

`[1] 12`

`m1[c(1,3),c(2,3)]`

```
col2 col3
row1 5 9
row3 7 11
```

- Find elements with given indexed condition - row 1, row4, column 3 and column 5.

- Find elements with given indexed condition - elements in first and fourth row.

- Find elements with given indexed condition - elements in second and fifth row.

- Find elements with given indexed condition - elements in third and sixth column.

```
# Creating given matrix
m3<- matrix(c(7:30), 4,6)
m3
```

```
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 7 11 15 19 23 27
[2,] 8 12 16 20 24 28
[3,] 9 13 17 21 25 29
[4,] 10 14 18 22 26 30
```

`m3[c(1,4),c(3,5)]`

```
[,1] [,2]
[1,] 15 23
[2,] 18 26
```

`m3[c(1,4),]`

```
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 7 11 15 19 23 27
[2,] 10 14 18 22 26 30
```

This will give us an error because the matrix have only four rows and the indexed condition is to find elements at second and fifth row.

`m3[c(2,5),]`

This will give us an error because the matrix have only four rows and the indexed condition is to find elements at second and fifth row.

`m3[,c(3,6)]`

```
[,1] [,2]
[1,] 15 27
[2,] 16 28
[3,] 17 29
[4,] 18 30
```

It is similar to matrix.

It is three dimensional.

It can store numerical, character or logical data but all elements should have same type.

We use `array( )`

to form an array.

X - axis represents the rows of array.

Y - axis represents the columns in array.

Z - axis represents the count of matrices in an array.

Let’s create an array of element 1 to 30 which have 3 rows, 2 columns and 5 matrices.

```
arr1 <- array(c(1:30), c(3,2,5))
arr1
```

```
, , 1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
, , 2
[,1] [,2]
[1,] 7 10
[2,] 8 11
[3,] 9 12
, , 3
[,1] [,2]
[1,] 13 16
[2,] 14 17
[3,] 15 18
, , 4
[,1] [,2]
[1,] 19 22
[2,] 20 23
[3,] 21 24
, , 5
[,1] [,2]
[1,] 25 28
[2,] 26 29
[3,] 27 30
```

Let’s create three vectors to name the dimensions.

```
x <- c("R1","R2","R3")
y <- c("C1","C2")
z <- c("M1","M2","M3","M4","M5")
```

Allocating dimension names to array.

```
dimnames(arr1) <- list(x,y,z)
arr1
```

```
, , M1
C1 C2
R1 1 4
R2 2 5
R3 3 6
, , M2
C1 C2
R1 7 10
R2 8 11
R3 9 12
, , M3
C1 C2
R1 13 16
R2 14 17
R3 15 18
, , M4
C1 C2
R1 19 22
R2 20 23
R3 21 24
, , M5
C1 C2
R1 25 28
R2 26 29
R3 27 30
```

`arr1[3,,2]`

.In this example we would like to identify the elements in `thrid row`

of `all columns`

in `second matrix`

.

`arr1[3,,2]`

```
C1 C2
9 12
```

`arr1[1,2,1]`

.In this example we would like to identify the elements in `first row`

of `second column`

of `first matrix`

.

`arr1[1,2,1]`

`[1] 4`

`arr1[,,1]`

.In this example we would like to identify all elements of `first matrix`

.

`arr1[,,1]`

```
C1 C2
R1 1 4
R2 2 5
R3 3 6
```

`arr1[,,2]`

.In this example we would like to identify all elements of `second matrix`

.

`arr1[,,2]`

```
C1 C2
R1 7 10
R2 8 11
R3 9 12
```

`arr1[3,1,1]`

.In this example we would like to identify the elements in `third row`

of `first column`

of `first matrix`

.

`arr1[3,1,1]`

`[1] 3`

`arr1[c(1:3),c(1,2),5]`

.In this example we would like to identify the elements in `first three rows`

of `first and second column`

of `fifth matrix`

.

`arr1[c(1:3),c(1,2),5]`

```
C1 C2
R1 25 28
R2 26 29
R3 27 30
```

`arr1[c(1:3),c(1,2),c(1,5)]`

.In this example we would like to identify the elements in `first three rows`

of `first and second column`

of `first and fifth matrix`

.

`arr1[c(1:3),c(1,2),c(1,5)]`

```
, , M1
C1 C2
R1 1 4
R2 2 5
R3 3 6
, , M5
C1 C2
R1 25 28
R2 26 29
R3 27 30
```

It can store numerical, character or logical data.

Different type of elements can be stored in a data frame.

We use data.frame( ) to form a data frame.

Each column should contain same number of data items.

A dataframe is actually a combination of vectors. Let’s first create three vectors.

```
studentname <- c("Amit","Ajay","Nilo","Manish","Mantosh")
mathsscore <- c(75,70,85,99,80)
sciencescore <- c(65,50,45,95,70)
```

Let’s create a dataframe by combining these three vectors.

```
df1 <- data.frame(studentname,mathsscore, sciencescore)
df1
```

```
studentname mathsscore sciencescore
1 Amit 75 65
2 Ajay 70 50
3 Nilo 85 45
4 Manish 99 95
5 Mantosh 80 70
```

`$`

sign`$`

sign is used to get into a particular column/variable of a dataframe.

The moment you enter a `$`

sign after the name of a dataframe, it will show you all available variables of the dataframe. You can select the variable on which you want to work. Refer to the image.

We will use the below mentioned code to select `studentname`

variable.

`df1$studentname`

`[1] "Amit" "Ajay" "Nilo" "Manish" "Mantosh"`

We will use the below mentioned code to select `mathsscore`

variable.

`df1$mathsscore`

`[1] 75 70 85 99 80`

We will use the below mentioned code to select `sciencescore`

variable.

`df1$sciencescore`

`[1] 65 50 45 95 70`

`df1`

```
# First Method
df1[4,1]
```

`[1] "Manish"`

```
# Second Method
df1$studentname[4]
```

`[1] "Manish"`

In first example, we have done indexing exactly in the same manner as we did in Matrix Indexing

`df1`

using indexing.`df1[df1$studentname=="Manish",2]`

`[1] 99`

`df1`

using indexing.`df1$mathsscore[df1$mathsscore>70]`

`[1] 75 85 99 80`

List can contain a combination of vectors, matrices, array, data frames and other lists.

It is one of the most complex data structures available in R.

Because, lists have capability to store multiple data structures at the same time hence it can save different type of elements also.

`l1`

using a vector `v1`

, matrix `m1`

, array `arr1`

and dataframe `df1`

.```
l1 <- list(v1,m1,arr1,df1)
l1
```

```
[[1]]
[1] 1 9 10 -5 -4
[[2]]
col1 col2 col3 col4 col5
row1 1 5 9 13 17
row2 2 6 10 14 18
row3 3 7 11 15 19
row4 4 8 12 16 20
[[3]]
, , M1
C1 C2
R1 1 4
R2 2 5
R3 3 6
, , M2
C1 C2
R1 7 10
R2 8 11
R3 9 12
, , M3
C1 C2
R1 13 16
R2 14 17
R3 15 18
, , M4
C1 C2
R1 19 22
R2 20 23
R3 21 24
, , M5
C1 C2
R1 25 28
R2 26 29
R3 27 30
[[4]]
studentname mathsscore sciencescore
1 Amit 75 65
2 Ajay 70 50
3 Nilo 85 45
4 Manish 99 95
5 Mantosh 80 70
```

<<Previous | Next>> |
---|

© Copyright 2021

[RUHH ROBOTICS AUTHORS]

www.examsforwinners.com