Auf vorherigen Wert zugreifen

Wie erweitere ich R um eigene Funktionen oder Pakete? Welches Paket ist passend für meine Fragestellung?

Moderatoren: EDi, jogo

Antworten
Mr.KSS

Auf vorherigen Wert zugreifen

Beitrag von Mr.KSS »

Guten Tag,

mir liegt folgende Aufgabenstellung vor:
In der Datei "Amex Cater Star.txt" (siehe Anhang) finden Sie die täglichen diskreten Renditen von American Express, Caterpillar und Starbucks. Die Datei "USD EUR.txt" (siehe Anhang) enthält zudem die täglichen Wechselkurse zwischen USD und EUR. Schreiben Sie eine eigene, benutzerdefinierte Funktion myEURreturn(matrix1, matrix2), der die Matrixen aus den beiden Dateien übergeben werden und die die täglichen Renditen der drei Unternehmen aus Sicht eines EUR-Investors berechnen soll.


Diesbezüglich habe ich folgendes programmiert:

Code: Alles auswählen

library(tidyverse)
amex = read.table("~/EWFA (1)/3_Projekt/2/Amex_Cater_Star.txt", header = T)
amex$date = as.character(amex$date)
exch = read.table("~/EWFA (1)/3_Projekt/2/USD_EUR.txt", header=T)
exch$Mon <- ifelse(nchar(exch$Mon) == 1, paste0("0", exch$Mon), exch$Mon)
exch$Day <- ifelse(nchar(exch$Day) == 1, paste0("0", exch$Day), exch$Day)
exch$date <- paste(exch$Date, exch$Mon, exch$Day, sep = "")

myEURreturn <- function(matrix1, matrix2) {
  total = dplyr::right_join(matrix1, matrix2, by = "date") %>%
    dplyr::filter(!is.na(axp)) %>%
    dplyr::select(-c(Date, Mon, Day)) %>%
    dplyr::mutate(rentaxp_usd = (1+axp)*1000,
                  rentaxp_usd = dplyr::lag(rentaxp_usd) * (1+axp),
                  rentaxp_eur = rentaxp_usd*Value,
                  
                  rentaxp_eurch =(rentaxp_eur- dplyr::lag(rentaxp_eur))/dplyr::lag(rentaxp_eur),
                  rentaxp_eurch = rentaxp_eurch*100,
                  
                  rentcat_usd = (1+cat)*1000,
                  rentcat_usd = dplyr::lag(rentcat_usd) * (1+cat),
                  rentcat_eur = rentcat_usd*Value,
                  
                  rentcat_eurch =(rentcat_eur- dplyr::lag(rentcat_eur))/dplyr::lag(rentcat_eur),
                  rentcat_eurch = rentcat_eurch*100,
                  
                  
                  rentsbux_usd = (1+sbux)*1000,
                  rentsbux_usd = dplyr::lag(rentsbux_usd) * (1+sbux),
                  rentsbux_eur = rentsbux_usd*Value,
                  
                  rentsbux_eurch =(rentsbux_eur- dplyr::lag(rentsbux_eur))/dplyr::lag(rentsbux_eur),
                  rentsbux_eurch = rentsbux_eurch*100)
    
  
}

test = myEURreturn(amex, exch)
Mein Problem ist, dass R auf den jeweiligen Wert des vorherigen Tages zugreifen und mit diesem Wert weiterrechnen soll.

Kann mir jemand mit einer Verbesserung meines Codes weiterhelfen?

Vielen Dank und viele Grüße.
Dateianhänge
USD_EUR.txt
(43.12 KiB) 73-mal heruntergeladen
Amex_Cater_Star.txt
(90.79 KiB) 77-mal heruntergeladen
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Auf vorherigen Wert zugreifen

Beitrag von jogo »

Hallo KSS,

man so eine Konstruktion verwenden wie

Code: Alles auswählen

c(NA, head(x, -1))
Beispiel:

Code: Alles auswählen

x <- 1:10
c(NA, head(x, -1))
Gruß, Jörg
Mr.KSS

Re: Auf vorherigen Wert zugreifen

Beitrag von Mr.KSS »

Danke für die Antwort, nur leider bringt mir das in dem oben geschilderten Fall nichts.

Ich habe beispielsweise folgende Zahlenreihenfolge:

990
890
912
915
1003

Doch wie sagt ich dem Programm, dass es den vorherigen Wert zur Berechnung heranziehen soll?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Auf vorherigen Wert zugreifen

Beitrag von jogo »

Code: Alles auswählen

d <- data.frame(aktuell=c(990, 890, 912, 915, 1003))
d
d$vorher <- c(NA, head(d$aktuell, -1))
d
Nun steht in jeder Zeile nicht nur der aktuelle Wert, sondern auch jeweils der vorherige.

Gruß, Jörg
Antworten