Ich habe Probleme beim Generieren der folgenden Dummy-Variablen in R:
Ich analysiere jährliche Zeitreihendaten (Zeitraum 1948-2009). Ich habe zwei Fragen:
Wie generiere ich eine Dummy-Variable für Beobachtung Nr. 10, dh für das Jahr 1957 (Wert = 1 bei 1957 und sonst Null)?
Wie generiere ich eine Dummy-Variable, die vor 1957 Null ist und von 1957 bis 2009 den Wert 1 annimmt?
+ 0
oder aus einer Formel entfernen- 1
. Somodel.matrix(~ year.f + 0)
wird ein Geben Dummy - Variablen ohne Referenzebene geben.Der einfachste Weg, diese Dummy-Variablen zu erzeugen, ist etwa der folgende:
Im Allgemeinen können Sie
ifelse
abhängig von einer Bedingung zwischen zwei Werten wählen. Wenn Sie also anstelle einer 0-1-Dummy-Variablen aus irgendeinem Grund beispielsweise 4 und 7 verwenden möchten, können Sie diese verwendenifelse(year == 1957, 4, 7)
.quelle
Verwenden von Dummies :: dummy () :
quelle
Das Paket
mlr
enthältcreateDummyFeatures
zu diesem Zweck:createDummyFeatures
löscht die ursprüngliche Variable.https://www.rdocumentation.org/packages/mlr/versions/2.9/topics/createDummyFeatures
.....
quelle
Die anderen Antworten hier bieten direkte Wege, um diese Aufgabe zu erfüllen - eine, die viele Modelle (z. B.
lm
) ohnehin intern für Sie erledigen. Dennoch gibt es hier Möglichkeiten, Dummy-Variablen mit Max Kuhns beliebten Paketencaret
undrecipes
Paketen zu erstellen. Obwohl sie etwas ausführlicher sind, lassen sich beide leicht auf kompliziertere Situationen skalieren und passen genau in ihre jeweiligen Rahmenbedingungen.caret::dummyVars
Mit
caret
ist die relevante FunktiondummyVars
, die einepredict
Methode hat, um sie auf einen Datenrahmen anzuwenden:recipes::step_dummy
Mit
recipes
ist die relevante Funktionstep_dummy
:Extrahieren Sie die Daten je nach Kontext mit
prep
und entwederbake
oderjuice
:quelle
Für den in der Frage dargestellten Anwendungsfall können Sie die logische Bedingung auch einfach mit
1
(oder vielleicht sogar besser mit1L
) multiplizieren :was gibt:
Für die Anwendungsfälle, wie sie beispielsweise in den Antworten von @ zx8754 und @Sotos dargestellt sind, gibt es noch einige andere Optionen, die imo noch nicht behandelt wurden.
1) Machen Sie Ihre eigenen
make_dummies
-functionwas gibt:
2) Verwenden Sie die Funktion
dcast
von entwederDatentabelle oder umformen2was gibt:
Dies funktioniert jedoch nicht, wenn die Spalte, für die die Dummies erstellt werden müssen, doppelte Werte enthält. In dem Fall, dass eine bestimmte Aggregationsfunktion benötigt wird
dcast
und das Ergebnis derdcast
Notwendigkeit wieder mit dem Original zusammengeführt werden muss:was gibt (beachten Sie, dass das Ergebnis nach der
by
Spalte geordnet ist ):3) Verwenden Sie die
spread
-Funktion vontidyr(mitmutate
vondplyr)was gibt:
quelle
Was ich normalerweise mache, um mit dieser Art von Dummy-Variablen zu arbeiten, ist:
(1) Wie generiere ich eine Dummy-Variable für Beobachtung Nr. 10, dh für das Jahr 1957 (Wert = 1 bei 1957 und ansonsten Null)?
(2) Wie generiere ich eine Dummy-Variable, die vor 1957 Null ist und von 1957 bis 2009 den Wert 1 annimmt?
Dann kann ich diesen Faktor als Dummy-Variable in meine Modelle einführen. Um beispielsweise zu sehen, ob eine Variable einen langfristigen Trend aufweist
y
:Hoffe das hilft!
quelle
Wenn Sie anstelle von K-1 K-Dummy-Variablen erhalten möchten, versuchen Sie Folgendes:
Beste,
quelle
as.data.frame.matrix(dummies)
, um es in eines zu übersetzenIch habe das im Kaggle-Forum gelesen:
quelle
Die
ifelse
Funktion eignet sich am besten für eine einfache Logik wie diese.Wenn Sie möchten, dass Zeichendaten zurückgegeben werden, können Sie dies auch tun.
Kategoriale Variablen mit Verschachtelung ...
Dies ist die einfachste Option.
quelle
Eine andere Möglichkeit ist die Verwendung
mtabulate
aus demqdapTools
Paket, dhwas gibt,
quelle
Konvertieren Sie Ihre Daten in eine data.table und verwenden Sie set by reference und row filter
Proof-of-Concept-Spielzeugbeispiel:
quelle
Dieser eine Liner in Basis R.
gibt
quelle
Ich benutze eine solche Funktion (für data.table):
Verwendung:
quelle
Eine andere Möglichkeit ist die Verwendung
quelle
Hallo, ich habe diese allgemeine Funktion geschrieben, um eine Dummy-Variable zu generieren, die im Wesentlichen die Ersetzungsfunktion in Stata repliziert.
Wenn x ist, ist der Datenrahmen x und ich möchte eine Dummy-Variable namens
a
, die Wert annimmt,1
wennx$b
Wert angenommen wirdc
quelle
Wir können auch
cSplit_e
von verwendensplitstackshape
. Verwenden der Daten von @ zx8754Um es für andere Daten als numerisch wir müssen arbeiten , um anzugeben ,
type
wie"character"
ausdrücklichquelle