64^(1/3)
[1] 4
Use R to calculate the principal cubed root of 64, \sqrt[3]{64}.
The cubed root of 64 can also be written as 64^\frac{1}{3}. We can calculate this in R with:
64^(1/3)
[1] 4
Use R to calculate \ln(e^5).
We can calculate this with:
log(exp(5))
[1] 5
The reason we get 5 (the same as the input value) is because \log(e^x)=x for all x.
Use R to calculate \log_4(64).
That is, take the log of 64 to the base 4.
We can specify the base using the base
argument in the log()
function:
log(64, base = 4)
[1] 3
The reason we get 3 is because we need to multiply 4 by itself exactly 3 times to get 64:
4 * 4 * 4
[1] 64
In R we create vectors with the c()
function (the combine function). In a vector, all elements need to have the same type (like numerical, logical, character). If we combine elements of different types into a vector, the c()
function will force elements to a common type.
What types are the following vectors?
c(1, 2, 3, TRUE, FALSE)
c(1, 2, "3")
c(TRUE, FALSE, "Yes", "No")
Let’s create each of the following vector and check their classes:
<- c(1, 2, 3, TRUE, FALSE)
q4i q4i
[1] 1 2 3 1 0
class(q4i)
[1] "numeric"
R coerces all values to numeric because of the presence of both numeric and logical values. It coerces the TRUE
to 1 and FALSE
to 0.
<- c(1, 2, "3")
q4ii q4ii
[1] "1" "2" "3"
class(q4ii)
[1] "character"
R coerces all to character because of the presence of both numeric and character values. It coerces the 1
to "1"
and 2
to "2"
.
<- c(TRUE, FALSE, "Yes", "No")
q4iii q4iii
[1] "TRUE" "FALSE" "Yes" "No"
class(q4iii)
[1] "character"
R coerces all to character because of the presence of both logical and character values. It coerces the TRUE
to "TRUE"
and FALSE
to "FALSE"
.
The hierarchy for conversion is logical < numeric < character.
Consider the sequence \left(1.0, 1.2, 1.4, 1.6, ..., 100\right).
We can see the sequence is numbers from 1 to 100 in steps of 0.2. We can create this with:
<- seq(from = 1, to = 100, by = 0.2) x
To find the number of elements in x
we use the length()
function:
length(x)
[1] 496
To find the 100th element of x
we can use indexing:
100] x[
[1] 20.8
To find the median value of x
we can use the median()
function:
median(x)
[1] 50.5
Create the sequence:
\left(1, 1, 2, 2, 3, 3, 4, 4, 5, 5, ..., 98, 98, 99, 99, 100, 100\right)
Assign this sequence to the variable x
.
Write a command to get the subset of this sequence with values exceeding 60. The output should be: \left(61, 61, 62, 62, ..., 99, 99, 100, 100\right)
What is the average of this subsequence?
We can this sequence using the rep()
function with the each
option:
<- rep(1:100, each = 2)
x x
[1] 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9
[19] 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18
[37] 19 19 20 20 21 21 22 22 23 23 24 24 25 25 26 26 27 27
[55] 28 28 29 29 30 30 31 31 32 32 33 33 34 34 35 35 36 36
[73] 37 37 38 38 39 39 40 40 41 41 42 42 43 43 44 44 45 45
[91] 46 46 47 47 48 48 49 49 50 50 51 51 52 52 53 53 54 54
[109] 55 55 56 56 57 57 58 58 59 59 60 60 61 61 62 62 63 63
[127] 64 64 65 65 66 66 67 67 68 68 69 69 70 70 71 71 72 72
[145] 73 73 74 74 75 75 76 76 77 77 78 78 79 79 80 80 81 81
[163] 82 82 83 83 84 84 85 85 86 86 87 87 88 88 89 89 90 90
[181] 91 91 92 92 93 93 94 94 95 95 96 96 97 97 98 98 99 99
[199] 100 100
To get the values exceeding 60 we can use logical indexing:
> 60] x[x
[1] 61 61 62 62 63 63 64 64 65 65 66 66 67 67 68 68 69 69 70
[20] 70 71 71 72 72 73 73 74 74 75 75 76 76 77 77 78 78 79 79
[39] 80 80 81 81 82 82 83 83 84 84 85 85 86 86 87 87 88 88 89
[58] 89 90 90 91 91 92 92 93 93 94 94 95 95 96 96 97 97 98 98
[77] 99 99 100 100
To get the average of this we use the mean()
function on this subsequence:
mean(x[x > 60])
[1] 80.5
Using the example logical vectors a
and b
from the book:
<- c(TRUE, TRUE, FALSE, FALSE)
a <- c(TRUE, FALSE, TRUE, FALSE) b
Which command returns the elements where a
and b
are not both TRUE
?
We use !a
to get when a
is not TRUE
. Similarly, we use !b
to get when b
is not TRUE
. To see when a
and b
are both not TRUE
we use the logical AND operator &
with !a
and !b
:
<- c(TRUE, TRUE, FALSE, FALSE)
a <- c(TRUE, FALSE, TRUE, FALSE)
b
!a & !b
[1] FALSE FALSE FALSE TRUE
a
and b
are both not TRUE
only in the 4th element, when both a
and b
are FALSE
.
Download the file rotterdam-airbnb.csv.
This contains data on Rotterdam Airbnb listings.
Read it into R. What is the average price of a night’s stay in the data?
If the data is loaded in R as df
, you can get the vector of prices with the command df$price
.
First we create a folder for our project and put the rotterdam-airbnb.csv
file into that folder. Then we start a new project in RStudio and point RStudio to where the folder is. RStudio will open a new session and we will be in the directory of the project which has the dataset in it. We should be able to see the rotterdam-airbnb.csv
file in the “Files” tab in RStudio.
<- read.csv("rotterdam-airbnb.csv")
df mean(df$price)
[1] 162.6658