2017-07-14 2 views
0

Ich versuche, eine neue Variable in einem Datenrahmen zu erstellen (eine neue Spalte). Der Wert wird für jede Beobachtung anders berechnet, also habe ich dafür eine Schleife verwendet. Nehmen wir an die neue Variable in den Datenrahmen hinzufügen REPLIC Ich versuche PLWerte auf eine neue Variable setzen

REPLIC$PL <- for (i in 1:ncol(REPLIC)) if (REPLIC$FTR[i]=="D") { REPLIC$PL[i] <- REPLIC$f_of_bet[i]*starting_budget*REPLIC$max[i])} else { REPLIC$PL[i] <- REPLIC$f_of_bet[i]*starting_budget*-1} genannt wird

ich auch mutieren mit versucht haben

REPLIC <- mutate(REPLIC, PL = for loop goes here)

auch Funktion

versucht anwenden

REPLIC$PL <- apply(REPLIC,1, for loop here)

I bin neu für R und ich verstehe nicht wirklich, was mir hier fehlt. Das einzige, was ich bis jetzt geschafft habe, ist PL Werte in der globalen Umgebung zu erstellen. Ich wäre wirklich glücklich, wenn jemand mich unterrichten könnte.

Antwort

0

Keine Notwendigkeit, eine Schleife hier zu verwenden, alles kann mit Vektoren erfolgen. Da Sie nichts über Ihre Daten mitgeteilt haben, musste ich einige Annahmen machen, bitte korrigieren Sie mich, wenn diese falsch sind.

#create fake data 

starting_budget <- 1000 

REPLIC <- data.frame(FTR = c(rep('D',5),rep('A',5)),f_of_bet = runif(10),max=runif(10)) 

> REPLIC 
    FTR f_of_bet  max 
1 D 0.78590664 0.3620227 
2 D 0.15498935 0.4921082 
3 D 0.20469729 0.5597419 
4 D 0.01167919 0.3677215 
5 D 0.32862533 0.5531767 
6 A 0.52029750 0.5391566 
7 A 0.63206626 0.9727405 
8 A 0.54632605 0.7221810 
9 A 0.58939969 0.6103260 
10 A 0.15375445 0.1996567 

Der folgende Code fügt Ihre neue Spalte hinzu. Ich verwende ifelse da Sie eine Bedingung auf FTR haben:

REPLIC$PL <- ifelse(REPLIC$FTR == 'D', 
        REPLIC$f_of_bet * starting_budget * REPLIC$max, 
        REPLIC$f_of_bet * starting_budget * -1) 

Dies gibt Ihnen:

> REPLIC 
    FTR f_of_bet  max   PL 
1 D 0.78590664 0.3620227 284.51602 
2 D 0.15498935 0.4921082 76.27153 
3 D 0.20469729 0.5597419 114.57764 
4 D 0.01167919 0.3677215 4.29469 
5 D 0.32862533 0.5531767 181.78787 
6 A 0.52029750 0.5391566 -520.29750 
7 A 0.63206626 0.9727405 -632.06626 
8 A 0.54632605 0.7221810 -546.32605 
9 A 0.58939969 0.6103260 -589.39969 
10 A 0.15375445 0.1996567 -153.75445 
+0

Oh wow! Ich glaube nicht, dass die Lösung so einfach sein könnte. Ich wusste bis jetzt nichts über die ifelse Funktion. Danke vielmals!! und btw - in Bezug auf die for-Schleife, muss ich auch "Pause" irgendwo verwenden oder es stoppt nur nach Abschluss des Datenrahmens? –

+0

Eine for-Schleife wird beendet, sobald sie über alle Elemente iteriert wurde, die sie als Eingabe erhalten hat (in Ihrem Fall wird '1: ncol' alle Spaltenindizes durchlaufen. Wenn Sie einen 'break' hinzufügen, stoppt die Schleife vollständig an dem Punkt, an dem sie ist angetroffen. – Val

Verwandte Themen