# Activity 2
# Submitted by Marc Rappaport
#############################################

# Vectors
b <- c(TRUE, TRUE, FALSE, TRUE)
class(b)
## [1] "logical"
d <- c(1.5, 3, 12, 23)
class(d) 
## [1] "numeric"
g <- c("hello", "hi", "bye", "good")
class(g)
## [1] "character"
h<- 10:30
class(h)
## [1] "integer"
# Create a vector with different class types
my_vec <- c(1, 3, TRUE, "activity")

class(my_vec)
## [1] "character"
# Convert the elements to numeric
as.numeric(my_vec)
## Warning: NAs introduced by coercion
## [1]  1  3 NA NA
# Convert the elements to character
as.character(my_vec)
## [1] "1"        "3"        "TRUE"     "activity"
# Convert the elements to logical
as.logical(my_vec)
## [1]   NA   NA TRUE   NA
###########################################################################
# Sub-setting Vectors
vector_name <- c(1, 12, 13, 34, 57)

#Access the first element using index
vector_name[1]
## [1] 1
#Access the second through the fourth elements
vector_name[2:4]
## [1] 12 13 34
#Access all element except the third and the fifth
vector_name[-c(3,5)]
## [1]  1 12 34
#Not the first
vector_name[-1]
## [1] 12 13 34 57
#What type of statement do you get by running the following code?
vector_name > 12
## [1] FALSE FALSE  TRUE  TRUE  TRUE
#Boolean

#what values satisfy the statement above?
vector_name[vector_name>12]
## [1] 13 34 57
#state the vector's length 
length(vector_name)
## [1] 5
# Which elements from the list c(12,13,14) are in the vector?
vector_name[vector_name %in% c(12,13,14)]
## [1] 12 13
##############################################################################

# EXTRACTING ELEMENTS FROM VECTORS 

# Dataset: rivers

rivers
##   [1]  735  320  325  392  524  450 1459  135  465  600  330  336  280  315  870
##  [16]  906  202  329  290 1000  600  505 1450  840 1243  890  350  407  286  280
##  [31]  525  720  390  250  327  230  265  850  210  630  260  230  360  730  600
##  [46]  306  390  420  291  710  340  217  281  352  259  250  470  680  570  350
##  [61]  300  560  900  625  332 2348 1171 3710 2315 2533  780  280  410  460  260
##  [76]  255  431  350  760  618  338  981 1306  500  696  605  250  411 1054  735
##  [91]  233  435  490  310  460  383  375 1270  545  445 1885  380  300  380  377
## [106]  425  276  210  800  420  350  360  538 1100 1205  314  237  610  360  540
## [121] 1038  424  310  300  444  301  268  620  215  652  900  525  246  360  529
## [136]  500  720  270  430  671 1770
# What is 'rivers'?

#This data set gives the lengths (in miles) of 141 “major” rivers in North America,
#as compiled by the US Geological Survey.
# You get this info by typing ?rivers in the console

# How many rivers are longer than 1000 miles?
rivers>1000
##   [1] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
##  [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [25]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [61] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE
##  [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
##  [85] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [97] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [109] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
## [121]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
sum(rivers>1000)
## [1] 16
# Get the maximum river length
max(rivers)
## [1] 3710
# Get the smallest river length
min(rivers)
## [1] 135
# Sort river lengths in ascending order, then in a descending order. 
sort(rivers)
##   [1]  135  202  210  210  215  217  230  230  233  237  246  250  250  250  255
##  [16]  259  260  260  265  268  270  276  280  280  280  281  286  290  291  300
##  [31]  300  300  301  306  310  310  314  315  320  325  327  329  330  332  336
##  [46]  338  340  350  350  350  350  352  360  360  360  360  375  377  380  380
##  [61]  383  390  390  392  407  410  411  420  420  424  425  430  431  435  444
##  [76]  445  450  460  460  465  470  490  500  500  505  524  525  525  529  538
##  [91]  540  545  560  570  600  600  600  605  610  618  620  625  630  652  671
## [106]  680  696  710  720  720  730  735  735  760  780  800  840  850  870  890
## [121]  900  900  906  981 1000 1038 1054 1100 1171 1205 1243 1270 1306 1450 1459
## [136] 1770 1885 2315 2348 2533 3710
sort(rivers, decreasing = T)
##   [1] 3710 2533 2348 2315 1885 1770 1459 1450 1306 1270 1243 1205 1171 1100 1054
##  [16] 1038 1000  981  906  900  900  890  870  850  840  800  780  760  735  735
##  [31]  730  720  720  710  696  680  671  652  630  625  620  618  610  605  600
##  [46]  600  600  570  560  545  540  538  529  525  525  524  505  500  500  490
##  [61]  470  465  460  460  450  445  444  435  431  430  425  424  420  420  411
##  [76]  410  407  392  390  390  383  380  380  377  375  360  360  360  360  352
##  [91]  350  350  350  350  340  338  336  332  330  329  327  325  320  315  314
## [106]  310  310  306  301  300  300  300  291  290  286  281  280  280  280  276
## [121]  270  268  265  260  260  259  255  250  250  250  246  237  233  230  230
## [136]  217  215  210  210  202  135
# Find the indices of rivers with length equal to 350
which(rivers == 350)
## [1]  27  60  78 111
# Count how many unique river lengths there are
sum(rivers==350)
## [1] 4
# Coerce river lengths to character
as.character(rivers)
##   [1] "735"  "320"  "325"  "392"  "524"  "450"  "1459" "135"  "465"  "600" 
##  [11] "330"  "336"  "280"  "315"  "870"  "906"  "202"  "329"  "290"  "1000"
##  [21] "600"  "505"  "1450" "840"  "1243" "890"  "350"  "407"  "286"  "280" 
##  [31] "525"  "720"  "390"  "250"  "327"  "230"  "265"  "850"  "210"  "630" 
##  [41] "260"  "230"  "360"  "730"  "600"  "306"  "390"  "420"  "291"  "710" 
##  [51] "340"  "217"  "281"  "352"  "259"  "250"  "470"  "680"  "570"  "350" 
##  [61] "300"  "560"  "900"  "625"  "332"  "2348" "1171" "3710" "2315" "2533"
##  [71] "780"  "280"  "410"  "460"  "260"  "255"  "431"  "350"  "760"  "618" 
##  [81] "338"  "981"  "1306" "500"  "696"  "605"  "250"  "411"  "1054" "735" 
##  [91] "233"  "435"  "490"  "310"  "460"  "383"  "375"  "1270" "545"  "445" 
## [101] "1885" "380"  "300"  "380"  "377"  "425"  "276"  "210"  "800"  "420" 
## [111] "350"  "360"  "538"  "1100" "1205" "314"  "237"  "610"  "360"  "540" 
## [121] "1038" "424"  "310"  "300"  "444"  "301"  "268"  "620"  "215"  "652" 
## [131] "900"  "525"  "246"  "360"  "529"  "500"  "720"  "270"  "430"  "671" 
## [141] "1770"
# Multiply all river lengths by 100
rivers*100
##   [1]  73500  32000  32500  39200  52400  45000 145900  13500  46500  60000
##  [11]  33000  33600  28000  31500  87000  90600  20200  32900  29000 100000
##  [21]  60000  50500 145000  84000 124300  89000  35000  40700  28600  28000
##  [31]  52500  72000  39000  25000  32700  23000  26500  85000  21000  63000
##  [41]  26000  23000  36000  73000  60000  30600  39000  42000  29100  71000
##  [51]  34000  21700  28100  35200  25900  25000  47000  68000  57000  35000
##  [61]  30000  56000  90000  62500  33200 234800 117100 371000 231500 253300
##  [71]  78000  28000  41000  46000  26000  25500  43100  35000  76000  61800
##  [81]  33800  98100 130600  50000  69600  60500  25000  41100 105400  73500
##  [91]  23300  43500  49000  31000  46000  38300  37500 127000  54500  44500
## [101] 188500  38000  30000  38000  37700  42500  27600  21000  80000  42000
## [111]  35000  36000  53800 110000 120500  31400  23700  61000  36000  54000
## [121] 103800  42400  31000  30000  44400  30100  26800  62000  21500  65200
## [131]  90000  52500  24600  36000  52900  50000  72000  27000  43000  67100
## [141] 177000
#############################################################################
# MISSING VALUES 

Mixed_vector <- c(24, 60, Inf-Inf, NA)

is.na(Mixed_vector)
## [1] FALSE FALSE  TRUE  TRUE
is.nan(Mixed_vector)
## [1] FALSE FALSE  TRUE FALSE