#******************************************************************************************
#******************************************************************************************
#******************************************************************************************
# R Tutorium
#******************************************************************************************
#******************************************************************************************
#******************************************************************************************

#******************************************************************************************
#******************************************************************************************
# Basics
#******************************************************************************************
#******************************************************************************************

x <- "Hello World!"	  # assign a string to a variable x

x <- 10		 	          # assign a scalar to a variable x 
                      # wichtig bei Neuzuordnung eines Werts zur Variable x wird der vorherige Wert überschrieben insbesondere ändert sich hier der Datentyp

#******************************************************************************************
# Vektoren
#******************************************************************************************

x <- c(1, 2, 3, 4, 5)	# c ist die Kurzform für concatenate
x <- seq(1, 10, 2)  	# Sequenz von 1 bis 10, in Schrittweite 2
x <- 1 : 10         	# Kurzform für Sequenz der Schrittweite 1
x[1] 			            # Wert des Vektors x an der Stelle 1 Indizes starten bei 1 in R das Element x[0] existiert nicht!
x <- x[-1]		        # Vektor x wird überschrieben, das Element an Stelle 1 dabei ignoriert 
x[x < 3]      		    # Alle Elemente von x, deren Wert kleiner 3 ist

#******************************************************************************************
# Matrix
#******************************************************************************************

d <- c(1 : 10) 		    # Sequenz von 1 bis 10
x <- matrix(data = d, nrow = 5, ncol = 2, byrow = TRUE)  # Erstellt eine Matrix aus den Daten d, welche 5 Zeilen und 2 Spalten hat
View(x) 			        # Öffne x zur Ansicht
x 				            # print x in console

#******************************************************************************************
# Dataframe
#******************************************************************************************

x_d <- as.data.frame(x)                   # Erstellt einen data.frame aus der Matrix x (vorherige Folie)
colnames(x_d) <- c("Spalte1", "Spalte2")  # Benennung der Spalten des data.frame

x_d[,1]          	    # alle Werte der ersten Spalte
x_d$Spalte2      	    # alle Werte der Spalte 2 
x_d$Spalte1[1 : 3] 	  # Werte der ersten drei Zeilen von Spalte 1

x_d$Spalte3 <- x_d$Spalte1 + 2 * x_d$Spalte2 # Hinzufügen einer neuen Spalte „Spalte3“
x_d$Spalte2 <- NULL	  # Löschen von Spalte2
x_d[x_d$Spalte3 > 5, ]	# Filtern der Zeilen
x_d[order(x_d$Spalte3), ]	# Sortieren der Zeilen nach Spalte2

#******************************************************************************************
# Bedingungen
#******************************************************************************************

examResult <- 1.0
if(examResult <= 4.0){
  print("Prüfung bestanden")
}

if(examResult == 1.0){
  print("Glückwunsch zur 1.0!")
}else if(examResult <= 4.0){
  print(examResult)
}else{
  print("Leider musst du in die Nachklausur.")
}

#******************************************************************************************
# Schleifen
#******************************************************************************************

# for Schleife
x <- c(1, 3, 5, 10, 15)	# Initialisierung der Vektoren x, z
z <- c(2, 7, 8, 12, 17)

for(nExample in 1 : 5){
  print(nExample)
  z[nExample] <- z[nExample] + x[nExample]	# Addiere zu jedem Vektorelement von z das Vektorelement von x	
}
print(z)

# while Schleife
nCount <- 1
while(nCount < 5){
  z[nCount] <- z[nCount] + x[nCount]
  nCount <- nCount + 1	  # die Zählvariable muss manuell verändert werden
}
print(z)

#******************************************************************************************
# Funktionen
#******************************************************************************************

# Beispiel Berechnung des Mittelwerts mit Hilfe der Funktion mean()
x <- c(1, 2, 3, 4, 5)
mean(x, na.rm = TRUE)	# Objekt x als notwendiger Inputparameter
                      # weitere mögliche Inputparameter sind bspw. na.rm; hierbei werden mögliche NA Werte entfernt


# Erstellung eigener Funktionen
# mit dem Schlüsselwort function sagen wir, dass myFunction eine Funktion sein soll
# in den runden Klammern geben wir Inputparameter input1,…,inputN ein

# 1. eigene Funktion
greetings <- function(name){
  print(paste("Hallo ", name, sep = ""))
}
# Aufruf der Funktion mit Inputwert "Patric"
greetings("Patric")	


# Berechnung des Kapitalwerts eines Zahlungsstroms cashFlow (Vektor) mit Kalkulationszinssatz discountRate
calculatePresentValue <- function(cashFlow, discountRate){
  pv <- 0
  for(t in 1 : length(cashFlow)){
    pv <- pv + cashFlow[t] / (1+discountRate)^t
  }
  return(pv)
}

# Aufruf der Funktion für Zahlungsstrom cashFlow1 und Kalkulationszinssatz discountRate1
cashFlow1 <- c(100, 120, 160, 130, 145, 95)
discountRate1 <- 0.05
calculatePresentValue(cashFlow1, discountRate1)

#******************************************************************************************
#******************************************************************************************
# Datenimport und Datenexport
#******************************************************************************************
#******************************************************************************************

library("readxl")	 # Laden des Packages readxl

data <- read_excel("R:/Lehrangebot/IngWiss Praktikum/WS2223/Dokumente für Studis/data.xlsx")

View(data)

# Anstatt den Pfad im Befehl „read_excel“ direkt anzugeben, kann er auch vorab gesetzt werden:
# getwd()
# setwd("C:\Users\papenfpa\Daocuments\") #
# data <- read_excel("data.xlsx")

library(openxlsx)
write.xlsx(data, file = "data_excel.xlsx", sheetName = "HelloWorld", col.names = TRUE, row.names = FALSE, showNA = TRUE)


#******************************************************************************************
#******************************************************************************************
# Deskriptive Statistik
#******************************************************************************************
#******************************************************************************************

str(data) 		# Struktur des Datensets
names(data)		# Spaltennamen
head(data)		# Ausgabe der obersten Zeilen
data[10 : 20, ] 		# Ausgabe der Zeilen 10 bis 20
nrow(data)		# Zeilenanzahl
ncol(data) 		# Spaltenanzahl
dim(data) 		# Dimensionen (Zeilenanzahl und Spaltenanzahl)

mean(data$Besucheranzahl)		          # Berechnung des Erwartungswerts 
median(data$Besucheranzahl) 		      # Berechnung des Medians
var(data$Besucheranzahl)			        # Berechnung der Varianz 
sd(data$Besucheranzahl)			          # Berechnung der Standardabweichung
quantile(data$Besucheranzahl, 0.95)	  # Berechnung des q-ten Quantils
summary(data$Besucheranzahl) 		      # Summary des Datensatzes
cov(data$Besucheranzahl, data$Temperatur) # Berechnung der (Stichproben-) Kovarianz zwischen den Besucheranzahl und Temperatur
cor(data$Besucheranzahl, data$Temperatur) # Berechnung der Korrelation


#******************************************************************************************
#******************************************************************************************
# Plots
#******************************************************************************************
#******************************************************************************************

#******************************************************************************************
# Scatterplot zwischen Besucheranzahl und Temperatur
#******************************************************************************************
# es lässt sich ein linearer Zusammenhang erkennen

plot(data$Besucheranzahl, data$Temperatur, 
     col  = "black", main = "Schwimmbad", 
     ylab = "Temperatur", xlab = "Besucherzahl") 

#******************************************************************************************
# Linienplot
#******************************************************************************************

plot(data$Besucheranzahl,
     type = "l", 
     xlab = "", 
     ylab = "Anzahl", 		
     main = "Besucheranzahl im Schwimmbad",		
     ylim = c(1,700)) 

# Hinzufügen einer Linie für die Variable Temperatur
lines(data$Temperatur, type = "l", col = "red")

#******************************************************************************************
# Histogramm
#******************************************************************************************

hist(data$Besucheranzahl, 
     breaks = 12, 
     plot = TRUE,
     xlab = "Besucheranzahl",
     main = "Histogramm",
     freq = TRUE,
     col  = "lightgrey",
     border = "red")


#******************************************************************************************
#******************************************************************************************
# Regressionsanalyse
#******************************************************************************************
#******************************************************************************************

# Einlesen der Daten
data_lm <- read_excel("R:/Lehrangebot/IngWiss Praktikum/WS2223/Dokumente für Studis/data.xlsx")

#******************************************************************************************
# univariate Regression
#******************************************************************************************

# Einfluss von Temperatur auf die Besucheranzahl
lin_model <- lm("Besucheranzahl ~ Temperatur", data = data_lm) 
summary(lin_model)

#******************************************************************************************
# multivariate Regression
#******************************************************************************************

lin_model <- lm("Besucheranzahl ~ .", data = data) 
summary(lin_model)
