Datum, Formate, Mapply

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Datum, Formate, Mapply

Beitrag von schubbiaschwilli »

Gude!

Ich hoffe, das Thema ist hier richtig, der Betreff ist sehr kryptisch, aber das Problem dauert etwas länger.
Ich habe einen Dataframe, der einen Monat und ein Jahr enthält. Aus diesen Daten ermittele ich das Fälligkeitsdatum, und zwar den 3. Freitag in diesem Monat bzw. Jahr (ja, Eurex).

Dieses Datum ermittele ich mit einer Funktion, und formatiere und konvertiere da auch wild rum – Funktioniert aber.
Jetzt will ich die Daten in dem Dataframe in einer neuen Spalte speichern.
Dazu nehme ich mapply. Mapply liefert aber kein Datum, sondern die ‚Werte‘:
mapply(Maturity, df$Month, df$Year)
[1] 18278 18677 18341 18642 18313 18705
Mache ich dies über eine Schleife (ohne mapply), dann will es.

Mein Problem ist nun, dass ich nicht weiß, ob diese Funktion (mit wilden Formatierungen und Konvertierungen) in Kombination mit mapply so geht, oder ich da was fehlerhaft programmiert habe, oder ob es wirklich nicht geht.

Hier ein Minimalbeispiel:

Code: Alles auswählen

df <- data.frame(rep(1:3,2), rep(c(2020,2021),3))
colnames(df) <- c("Month", "Year")

Maturity <- function(month, year)
{
   d <- as.Date(ISOdate(year, month, 1, tz="UTC"))
   # wday: 0-6 day of the week, starting on Sunday.
   d <- d + (7 - as.POSIXlt(d)$wday - 2)
   if((as.POSIXlt(d, tz="UTC")$mon+1)!=month) d <- d + 7
   d <- d + 14
   return(d)
}

mapply(Maturity, df$Month, df$Year)

df$Maturity <- Sys.Date()
for(i in 1:nrow(df))
{df[i,]$Maturity <- Maturity(df[i,]$Month, df[i,]$Year)}
Dank&Gruß
schubbiaschwilli
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Datum, Formate, Mapply

Beitrag von EDi »

Hier 2 Ideen:

Code: Alles auswählen

# SIMPLYFY = FALSE
do.call(c, mapply(Maturity, df$Month, df$Year, SIMPLIFY = FALSE))
Reduce(c, mapply(Maturity, df$Month, df$Year, SIMPLIFY = FALSE))
# Corce back to date
as.Date(mapply(Maturity, df$Month, df$Year), origin = '1970-01-01')
Problem liegt beim simplify...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten