2016-06-09 15 views
0

Ich habe Datenrahmen:Manuelle Vorhersage in R (Datenrahmen)

DF 
    Chset Choices X1 X2 utility 
1  1  8 1 1  2 
2  1  2 0 1  3 
3  1  1 1 0  -1 
4  2  1 1 1  2 
5  2  5 0 1  5 
6  2  1 1 0  -1 
7  2  2 0 0  0 
8  3  1 1 1  2 
9  3  2 0 1  6 
10  3  5 1 0  -1 
11  4  6 1 1  2 
12  4  1 0 1  14 
13  4  1 1 0  -1 
14  4  1 0 0  0 

Und ich will Spalte erstellen „vorhersagen“, wo ich 1 setzen, wenn Nutzenmaximum in Chset ist. Zum Beispiel haben wir 3 Zeilen, wobei Chset = 1, und diese haben Dienstprogramme (2,3, -1). Dann wird in der Spalte "vorhersagen" sein sollte (0,1,0) - 1 Zeile 2, da sie die maximale Nützlichkeit in Chset hat = 1, und so weiter:

Chset Choices X1 X2 utility predict 
1  1  8 1 1  2  0 
2  1  2 0 1  3  1 
3  1  1 1 0  -1  0 
4  2  1 1 1  2  0 
5  2  5 0 1  5  1 
6  2  1 1 0  -1  0 
7  2  2 0 0  0  0 
8  3  1 1 1  2  0 
9  3  2 0 1  6  1 
10  3  5 1 0  -1  0 
11  4  6 1 1  2  0 
12  4  1 0 1  14  1 
13  4  1 1 0  -1  0 
14  4  1 0 0  0  0 

Danach möchte ich cheak, ob die Vorhersage richtig ist. Die Vorhersage ist korrekt, wenn vorhergesagt = 1 und der Wert in der Spalte "Auswahl" das Maximum in seinem "Chset" ist. Zum Beispiel können wir in Chset = 1 "predicate" = 1 für die 2. Zeile sehen, während das Maximum "Choices" in Chset = 1 in der 1. Zeile (und gleich 8) ist, also ist die Vorhersage falsch. Im Gegensatz dazu ist in "Chset = 2" "Vorhersage" gleich 1 für die 5. Zeile und diese Zeile hat den Maximalwert von "Auswahl" innerhalb dieses Chsets = 2, daher ist hier die Vorhersage korrekt. Um alle Fälle zu checken, möchte ich eine Tabelle "cheak" erstellen, die gleich 1 ist, wenn die Vorhersage korrekt ist, und 0 umgekehrt. Schließlich sollte ich bekommen:

Chset Choices X1 X2 utility predict cheak 
1  1  8 1 1  2  0  0 
2  1  2 0 1  3  1  0 
3  1  1 1 0  -1  0  0 
4  2  1 1 1  2  0  0 
5  2  5 0 1  5  1  1 
6  2  1 1 0  -1  0  0 
7  2  2 0 0  0  0  0 
8  3  1 1 1  2  0  0 
9  3  2 0 1  6  1  0 
10  3  5 1 0  -1  0  0 
11  4  6 1 1  2  0  0 
12  4  1 0 1  14  1  0 
13  4  1 1 0  -1  0  0 
14  4  1 0 0  0  0  0 

Wie kann ich das tun?

Warten auf Ihre Hilfe

Antwort

1

Dies sollte es tun

DF <- 
unsplit(lapply(split(DF, DF$Chset), 
       function(x) within(x, { 
        predict <- as.numeric(utility == max(utility)) 
        check <- as.numeric(Choices == max(Choices) & predict == 1) 
       })), 
     DF$Chset)