R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
library(leaflet)
# shell("c:/work/mast467/code/nasa1.cmd",translate = TRUE)
# Ingests data into R. Putting nothing in for the file separator command makes a
# "space" the file separator. This will prevent your data from turning in to a 
# giant text string.

OMG2021 = read.csv("c:/work/mast467/data/2021/2021.dat",sep="")
OMG2020 = read.csv("c:/work/mast467/data/2020/2020.dat",sep="")
OMG2019 = read.csv("c:/work/mast467/data/2019/2019.dat",sep="")
OMG2018 = read.csv("c:/work/mast467/data/2018/2018.dat",sep="")
OMG2017 = read.csv("c:/work/mast467/data/2017/2017.dat",sep="")
# Establishes names for the data frames. I decided having a separate frame with all
# of the profiles present would be useful for multi-year trend analysis. The native
# R functions for combining data frames were combining the data in a way I did not
# like, so I decided to just do it manually. Very inefficient, but I know the data is 
# correct in the final "OMGALL"

var_names = c("CAST","DATE","LAT","LON","D","T","S")
colnames(OMG2021) = var_names
colnames(OMG2020) = var_names
colnames(OMG2019) = var_names
colnames(OMG2018) = var_names
colnames(OMG2017) = var_names

a1 = c(OMG2021$CAST+0.1)
a2 = c(OMG2020$CAST+0.2)
a3 = c(OMG2019$CAST+0.3)
a4 = c(OMG2018$CAST+0.4)
a5 = c(OMG2017$CAST+0.5)

CASTALL = c(a1,a2,a3,a4,a5)

b1 = c(OMG2021$DATE)
b2 = c(OMG2020$DATE)
b3 = c(OMG2019$DATE)
b4 = c(OMG2018$DATE)
b5 = c(OMG2017$DATE)

DATEALL = c(b1,b2,b3,b4,b5)

c1 = c(OMG2021$LAT)
c2 = c(OMG2020$LAT)
c3 = c(OMG2019$LAT)
c4 = c(OMG2018$LAT)
c5 = c(OMG2017$LAT)

LATALL = c(c1,c2,c3,c4,c5)

d1 = c(OMG2021$LON)
d2 = c(OMG2020$LON)
d3 = c(OMG2019$LON)
d4 = c(OMG2018$LON)
d5 = c(OMG2017$LON)

LONALL = c(d1,d2,d3,d4,d5)

e1 = c(OMG2021$D)
e2 = c(OMG2020$D)
e3 = c(OMG2019$D)
e4 = c(OMG2018$D)
e5 = c(OMG2017$D)

PALL = c(e1,e2,e3,e4,e5)

f1 = c(OMG2021$T)
f2 = c(OMG2020$T)
f3 = c(OMG2019$T)
f4 = c(OMG2018$T)
f5 = c(OMG2017$T)

TALL = c(f1,f2,f3,f4,f5)

g1 = c(OMG2021$S)
g2 = c(OMG2020$S)
g3 = c(OMG2019$S)
g4 = c(OMG2018$S)
g5 = c(OMG2017$S)

SALL = c(g1,g2,g3,g4,g5)

OMGALL = data.frame(CASTALL,DATEALL,LATALL,LONALL,PALL,TALL,SALL)
colnames(OMGALL) = var_names

rm(a1,a2,a3,a4,a5,b1,b2,b3,b4,b5,c1,c2,c3,c4,c5,d1,d2,d3,d4,d5,e1,e2,e3,e4,e5)
rm(f1,f2,f3,f4,f5,g1,g2,g3,g4,g5,CASTALL,DATEALL,LATALL,LONALL,PALL,TALL,SALL)
# Single Plot Temperature, Salinity, and T(S). For the T(S) profile, I used the 
# code structure provided by Dr. Muenchow in his TEST document.

cc1_idx = which(OMG2021$CAST == 186)
cc1 = OMG2021[cc1_idx,]

ggplot(cc1,aes(x=T,y=-D)) +
  geom_path() +
  ggtitle("Temperature Profile",cc1$CAST) +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Temp, C") +
  ylab("Depth, m")  

ggplot(cc1,aes(x=S,y=-D)) +
  geom_path() +
  ggtitle("Salinity Profile",cc1$CAST) +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Temp, C") +
  ylab("Depth, m") 

ggplot(cc1,mapping=aes(x=S,y=T,color=D)) +
  geom_point() +
  ggtitle("T(S) Profile",cc1$CAST) +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Salinity, psu") +
  ylab("Temperature, C") +
  scale_color_viridis_c(guide=guide_colorbar(barheight=15))

# Number of profiles in study area. "Unique()" also exists in MATLAB. My total
# count of profiles (2017-2021) was 310.

a = unique(OMG2021$CAST)
CNT2021 = length(a)

a = unique(OMG2020$CAST)
CNT2020 = length(a)

a = unique(OMG2019$CAST)
CNT2019 = length(a)

a = unique(OMG2018$CAST)
CNT2018 = length(a)

a = unique(OMG2017$CAST)
CNT2017 = length(a)

CNTALL = sum(CNT2021,CNT2020,CNT2019,CNT2018,CNT2017)

rm(a)
# Deepest depth 

# Finds the difference between each value in the the D column and returns the
# index number. If the difference is negative, that means the depth went from 
# a high number to a low number. This method does not include the last "deepest"
# depth, so it must be appended to the index. There is probably a better way
# to do this.

# Last bit of code re-indexes the original data set into a "bottom only" data set
# that retains other values like Lat/Lon.

a = diff(OMG2021$D)
b = which(a < 0)
BTM2021_idx = append(b,length(a))

a = diff(OMG2020$D)
b = which(a < 0)
BTM2020_idx = append(b,length(a))

a = diff(OMG2019$D)
b = which(a < 0)
BTM2019_idx = append(b,length(a))

a = diff(OMG2018$D)
b = which(a < 0)
BTM2018_idx = append(b,length(a))

a = diff(OMG2017$D)
b = which(a < 0)
BTM2017_idx = append(b,length(a))

a = diff(OMGALL$D)
b = which(a < 0)
BTMALL_idx = append(b,length(a))

BTM2021 = OMG2021$D[BTM2021_idx]
BTM2020 = OMG2020$D[BTM2020_idx]
BTM2019 = OMG2019$D[BTM2019_idx]
BTM2018 = OMG2018$D[BTM2018_idx]
BTM2017 = OMG2017$D[BTM2017_idx]
BTMALL = OMGALL$D[BTMALL_idx]

rm(a,b)
# Multi-Plot +- 300m

# Uses the previously made bottom vectors with logic to filter +- 300m. Then 
# re-indexes a new data set consisting of only +- 300m values respectively. Plot
# structures are nearly identical to the single plots above, but I had to add limits to the 
# x and y values to handle the -99's present in the data. These "missing" -99's are
# what account for the "Missing Values" error in the geom_path() function. Also, 
# geom_path() allows you to group the line that is drawn and I chose to group by cast number
# this means that the end of cast (n) won't be connected to the beginning of cast (n+1).

a1 = OMG2021[BTM2021_idx,]
b1 = which(a1$D <= 300)
c1 = a1$CAST[b1]
SHALLOW2021_idx = which(OMG2021$CAST == c1)
## Warning in OMG2021$CAST == c1: longer object length is not a multiple of shorter
## object length
SHALLOW2021 = OMG2021[SHALLOW2021_idx,]

ggplot(SHALLOW2021,aes(x=T,y=-D)) +
  xlim(-2,6) +
  geom_path(group = SHALLOW2021$CAST) +
  ggtitle("2021 Shallow Temperature Profiles (<300m)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Temp, C") +
  ylab("Depth, m") 
## Warning: Removed 1 row(s) containing missing values (geom_path).

ggplot(SHALLOW2021,aes(x=S,y=-D)) +
  xlim(25,35) +
  geom_path(group = SHALLOW2021$CAST) +
  ggtitle("2021 Shallow Salinity Profiles (<300m)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Salinity, PSU") +
  ylab("Depth, m") 
## Warning: Removed 1 row(s) containing missing values (geom_path).

a1 = OMG2021[BTM2021_idx,]
b2 = which(a1$D >= 300)
c2 = a1$CAST[b2]
DEEP2021_idx = which(OMG2021$CAST == c2)
## Warning in OMG2021$CAST == c2: longer object length is not a multiple of shorter
## object length
DEEP2021 = OMG2021[DEEP2021_idx,]

ggplot(DEEP2021,aes(x=T,y=-D)) +
  xlim(-2,6) +
  geom_path(group = DEEP2021$CAST) +
  ggtitle("2021 Deep Temperature Profiles (>300m)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Temp, C") +
  ylab("Depth, m") 
## Warning: Removed 14 row(s) containing missing values (geom_path).

ggplot(DEEP2021,aes(x=S,y=-D)) +
  xlim(25,35) +
  geom_path(group = DEEP2021$CAST) +
  ggtitle("2021 Deep Salinity Profiles (>300m)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Salinity, PSU") +
  ylab("Depth, m") 
## Warning: Removed 14 row(s) containing missing values (geom_path).

ggplot(SHALLOW2021,mapping=aes(x=S,y=T,color=D)) +
  xlim(25,35) +
  ylim(-2,6) +
  geom_point() +
  ggtitle("2021 Shallow T(S) Profiles (<300m)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Salinity, psu") +
  ylab("Temperature, C") +
  scale_color_viridis_c(guide=guide_colorbar(barheight=15))
## Warning: Removed 1 rows containing missing values (geom_point).

ggplot(DEEP2021,mapping=aes(x=S,y=T,color=D)) +
  xlim(25,35) +
  ylim(-2,6) +
  geom_point() +
  ggtitle("2021 Deep T(S) Profiles (>300m)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  xlab("Salinity, psu") +
  ylab("Temperature, C") +
  scale_color_viridis_c(guide=guide_colorbar(barheight=15))
## Warning: Removed 138 rows containing missing values (geom_point).

rm(a1,b1,c1,b2,c2)
#MAPS. I am using the ggOceanMaps package, which requires the ggOceanMapsData package to run.
# I recommend making Bathymetry and Glaciers = "FALSE" when experimenting as they take up
# a lot of computing resources.

library(ggOceanMaps)
## Loading required package: ggspatial
## Registered S3 methods overwritten by 'stars':
##   method             from
##   st_bbox.SpatRaster sf  
##   st_crs.SpatRaster  sf
library(ggOceanMapsData)

study_region = data.frame(lon = c(-90, -90, -50, -50), lat = c(76, 72, 72, 76))

GREENLAND = basemap(limits = c(-70,-20,58,85),rotate = TRUE, bathymetry = TRUE ,glaciers = TRUE) +
  ggtitle("Greenland","Disko Island to Melville Bay (Region 3)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_spatial_polygon(data = study_region, aes(x = lon, y = lat), alpha = 0.5, fill = "red", color = "red")
## Warning in sp::proj4string(shapefiles$land): CRS object has comment, which is
## lost in output
## Using lon and lat as longitude and latitude columns, respectively.
## projection transformed from +init=epsg:4326 to +proj=stere +lat_0=90 +lat_ts=71 +lon_0=-45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
GREENLAND
## Assuming `crs = 4326` in stat_spatial_identity()

OMGALL_SINGULAR = OMGALL[BTMALL_idx,]

# Not separated by year, this is just so I can see the distribution of CTD measurements and
# their depth. 

REGION3 = basemap(limits = c(-80,-45,67,80),rotate = TRUE,bathymetry = TRUE, bathy.style = "contour_grey", glaciers = TRUE) +
  ggtitle("Spatial Distribution of CTD Measurements in Region 3 (2017 - 2021)") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_spatial_point(data = OMGALL_SINGULAR, aes(x = LON, y = LAT, color = D))
## Warning in sp::proj4string(shapefiles$land): CRS object has comment, which is
## lost in output
## Using lon and lat as longitude and latitude columns, respectively.
## projection transformed from +init=epsg:4326 to +proj=stere +lat_0=90 +lat_ts=71 +lon_0=-62.5 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs
REGION3
## Assuming `crs = 4326` in stat_spatial_identity()