2016-07-10 12 views
0

der Titel ist schrecklich, aber lassen Sie mich versuchen zu erklären, was ich will (Beispiel habe ich in Excel)Neue Spalte in Bezug auf Datum in R

Div Date  FTHG FTA R Weight Home Away 
I1 30.08.2014 0 1 A 0,72 0,00 0,72 
I1 30.08.2014 2 0 H 0,72 1,45 0,00 
I1 14.09.2014 4 5 A 0,73 2,91 3,64 
I1 14.09.2014 2 0 H 0,73 1,45 0,00 
I1 15.09.2014 2 1 H 0,73 1,45 0,73 
I1 20.09.2014 2 2 D 0,73 1,46 1,46 
I1 20.09.2014 0 1 A 0,73 0,00 0,73 
I1 21.09.2014 0 1 A 0,73 0,00 0,73 
I1 21.09.2014 2 3 A 0,73 1,46 2,20 
I1 21.09.2014 1 0 H 0,73 0,73 0,00 
I1 21.09.2014 1 1 D 0,73 0,73 0,73 
I1 21.09.2014 2 0 H 0,73 1,46 0,00 

Ich brauche drei neue Spalten:

Gewicht : Gewicht * FTHG

: Je näher der Termin heute bekommt, desto näher sollte das „Gewicht“ Spalte 1.

Startseite gehen

entfernt: Gewicht * FTA

Wie kann ich das in R tun? Danke!

+1

Welche Funktion verwenden möchten, um die Gewichte zu berechnen? An welchem ​​Punkt wird das Gewicht Null, steigen die Gewichte linear oder logarithmisch? Bitte erweitern Sie Ihre Frage. – hugovdberg

+0

exponentielle Glättung, Sigma 0,065 –

Antwort

1

Konvertieren Sie Ihre Datumszeichenfolge in ein Date-Objekt und subtrahieren Sie von heute, um den Zeitunterschied zu finden. Erstellen Sie eine Exponentialfunktion basierend auf dieser Zeitdifferenz und einer Zeitkonstante. Verwenden Sie dies, um Ihre Gewichtungen zu erstellen, und multiplizieren Sie dann mit den entsprechenden Spalten.

cols <- c('Div', 'Date', 'FTHG', 'FTA', 'R') 
d <- rbind(
    c('I1','30.08.2014','0','1','A'), 
    c('I1','30.08.2014','2','0','H'), 
    c('I1','14.09.2014','4','5','A'), 
    c('I1','14.09.2014','2','0','H'), 
    c('I1','15.09.2014','2','1','H'), 
    c('I1','20.09.2014','2','2','D'), 
    c('I1','20.09.2014','0','1','A'), 
    c('I1','21.09.2014','0','1','A'), 
    c('I1','21.09.2014','2','3','A'), 
    c('I1','21.09.2014','1','0','H'), 
    c('I1','21.09.2014','1','1','D'), 
    c('I1','21.09.2014','2','0','H') 
) 

df <- data.frame(d) 
colnames(df) <- cols 

# Adjust this 
time_constant <- 5.79 

df$Weight <- exp(-((as.numeric(Sys.Date() - as.Date(df$Date,"%d.%m.%Y")))/365) 
       /time_constant) 

df$Home <- df$Weight * as.numeric(as.vector(df$FTHG)) 
df$Away <- df$Weight * as.numeric(as.vector(df$FTA )) 

print(df) 

Ausgabe

Div  Date FTHG FTA R Weight  Home  Away 
1 I1 30.08.2014 0 1 A 0.7248692 0.0000000 0.7248692 
2 I1 30.08.2014 2 0 H 0.7248692 1.4497384 0.0000000 
3 I1 14.09.2014 4 5 A 0.7300325 2.9201298 3.6501623 
4 I1 14.09.2014 2 0 H 0.7300325 1.4600649 0.0000000 
5 I1 15.09.2014 2 1 H 0.7303780 1.4607559 0.7303780 
6 I1 20.09.2014 2 2 D 0.80 1.4642161 1.4642161 
7 I1 20.09.2014 0 1 A 0.80 0.0000000 0.80 
8 I1 21.09.2014 0 1 A 0.7324545 0.0000000 0.7324545 
9 I1 21.09.2014 2 3 A 0.7324545 1.4649091 2.1973636 
10 I1 21.09.2014 1 0 H 0.7324545 0.7324545 0.0000000 
11 I1 21.09.2014 1 1 D 0.7324545 0.7324545 0.7324545 
12 I1 21.09.2014 2 0 H 0.7324545 1.4649091 0.0000000 
+0

danke für die detaillierte Erklärung –

Verwandte Themen