Ich versuche eine neue Variable in einem Datensatz (+/- 10K Zeilen) zu erstellen, indem ich über einen anderen Datenrahmen basierend auf zwei Variablen im Datensatz iteriere . Irgendwie kann ich es nicht herausfinden, ohne Merge zu benutzen (nur um R zu lernen), vielleicht kann mich jemand in die richtige Richtung führen.Erstellen einer neuen Variablen durch Iteration über Spalten und Zeilen eines anderen Datenrahmens in R
Snapshot aus dem Datensatz - dat
ContractNumber | PDRating | PD_month
---
1 | 7+ | 1
---
1 | 7+ | 2
---
1 | 7+ | 3
---
2 | 6+ | 1
---
2 | 6+ | 2
---
and so on.....
So hat jeder Vertrag eine PDRating (die für Probability of Default Rating steht) und eine PDMonth, die den Monat stellt der Vertrag ist also, wenn ein Vertrag eine hat. Länge von 60 Monaten gibt es 60 Datensätze für den Vertrag. (übrigens meine erste Frage zu StackOverflow und ich habe noch nicht herausgefunden, wie ich eine gut aussehende Tabelle formatieren kann)
Der Datenrahmen (PD_Table) Ich möchte über iterieren besteht aus 180 Zeilen, die Monate und in darstellen de Header die PDRatings als Spaltennamen. Welche sieht wie folgt aus:
PD_month | 5- | 6+ | 6 | 6- | 7+ | ...
---
1 | 0.0001 | 0.0002 | 0.0004 | 0.0005 | ...
---
2 | 0.0001 | 0.0002 | 0.0004 | 0.0005 | ...
---
3 | 0.0001 | 0.0002 | 0.0004 | 0.0005 | ...
---
4 | 0.0001 | 0.0002 | 0.0004 | 0.0005 | ...
---
5 | 0.0001 | 0.0002 | 0.0004 | 0.0005 | ...
---
and so on.....
Die neue Variable ich so zu schaffen versuche ist dat $ PD und das neue „dat“ aussehen sollte:
ContractNumber | PDRating | PD_month | PD
---
1 | 7+ | 1 | 0.0005
---
1 | 7+ | 2 | 0.0005
---
1 | 7+ | 3 | 0.0005
---
2 | 6+ | 1 | 0.0002
---
2 | 6+ | 2 | 0.0002
---
and so on.....
Ich habe es jetzt geschieht durch:
Nun, das funktioniert, fühlt sich aber ein wenig ungeschickt an und ich muss die Zeilen sortieren und die Spalten neu anordnen. Also im Grunde ich für eine intelligentere Lösung suchen
Unter den Dingen, die ich versuchte, die nicht funktionierten, waren die folgenden:
dat$PD <- PD_Table[dat$PD_month, dat$PDRating]
# Returns a vector with all values for a rating as PD value]
# Note PD_Table was still in wide format
dat$PD <- for (i in nrow(dat)) PD_Table[dat$PD_month[i], dat$PDRating[i]]
# Does not returns anything
dat$PD <- for (i in nrow(dat3)) PD_Table[dat$PD_month[i], which(dat3$PDRating[i] == colnames(PD_Table))]
# Does not returns anything
Jede Hilfe sehr geschätzt!
Mit freundlichen Grüßen, Matthies
könnten Sie eine Probe Ihrer Daten zur Verfügung stellen, indem Sie 'dput()' – loki
Schmelzen und Verschmelzen ist definitiv „intelligente“ als for-Schleife in einem Iterieren! –
Diese Frage sieht ziemlich ähnlich aus [http://stackoverflow.com/questions/39235882/how-can-i-reference-a-list-based-on-a-variable-within-a-data- Rahmen/39236060). Ich würde empfehlen, Matrixindizierung wie in meiner Antwort dort zu verwenden. – lmo