R elegante Weg, um das Gleichgewicht unbalanced panel data
Ist es ein eleganter Weg, um das Gleichgewicht einer unausgeglichenen panel-Datensatz? Beginnen möchte ich mit einem unbalanced-panel (ie, einige Personen fehlen einige Daten) und am Ende mit einem balanced-panel (dh alle Individuen fehlen keine Daten). Nachfolgend finden Sie einige Beispiel-code. Die richtige end-Ergebnis ist für alle Erfassungen an 'Frank' und 'Edward' zu bleiben und für alle Beobachtungen auf 'Tony' entfernt werden, da er einige Daten fehlen. Danke.
unbal <- data.frame(PERSON=c(rep('Frank',5),rep('Tony',5),rep('Edward',5)), YEAR=c(2001,2002,2003,2004,2005,2001,2002,2003,2004,2005,2001,2002,2003,2004,2005), Y=c(21,22,23,24,25,5,6,NA,7,8,31,32,33,34,35), X=c(1:15))
unbal
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Weg zu Ausgeglichenheit, ein panel zu entfernen, Personen mit unvollständigen Daten, ein anderer Weg ist, zu füllen, in einen Wert, wie
NA
oder0
für die fehlenden Beobachtungen. Für den ersten Ansatz, die Sie verwenden könnencomplete.cases
Zeilen suchen, die keineNA
in Ihnen. Dann finden Sie allePERSON
mit mindestens einem fehlenden Fall.make.pbalanced
aus Paketplm
(neueste Entwicklung erforderliche version von r-forge.r-project.org/R/?group_id=406)make.pbalanced
aufgenommen (und mit argumentbalance.type = c("fill", "shared")
kann man wählen, ob die Daten erweitern oder zu reduzieren.So, ich bin nicht sicher, es erfüllt die "elegante" Anforderung, aber hier ist eine Allgemeine Funktion, die Sie verwenden können, um symmetrische Daten.
Können Sie Ihre gewünschte Ergebnis mit
Der erste parameter ist die Daten.frame, den Sie möchten Teilmenge. Der zweite parameter (
ID=
) ist ein Charakter-Vektor der Spaltennamen, identifizieren jede "person" im Datensatz. Dann dieTIME=
parameter ist auch ein Charakter-Vektor Angabe der verschiedenen Beobachtungszeiten für jede ID. Schließlich können Sie Optional angeben, eineVARS=
- argument, um anzugeben, welche Felder müssen NA (der Standardwert ist alle andere als ID-oder Zeitwerten). Schließlich gibt es eine Letzte parameter namensrequired
die Mitgliedstaaten, ob für jede ID muss über eine Beobachtung, die für jeden ZEITPUNKT (Verzug) oder wenn du es auf "freigegeben", es werden nur die ZEITEN, dass alle IDs haben, die nicht fehlenden Werte.So zum Beispiel
nur verlangt, dass "X" sein, NA für alle PERSON/JAHRE und da dies wahr ist, für alle Datensätze, kein sub-Einstellung erfolgt.
Wenn Sie
dann bekommen Sie die Daten für die Jahre 2001, 2002, 2004, 2005 für ALLE Personen, da Sie alle Daten für die Jahre.
Lassen Sie uns nun verwenden, erstellen Sie ein etwas anderes Beispiel-Datensatz
Merke jetzt, dass Edward ist der einzige Mensch, hat einen Wert für 2006. Dies bedeutet, dass
gibt jetzt nichts, aber
werden die Daten zurück, die für 2001,2002, 2004, da alle Personen, die Daten für diese Jahre.
Einer Lösung, die ich verwendet habe, ist vorübergehend Umformen der Daten-frame in wide format mit Jahren als Spalten und Einheiten, die als Zeilen, und dann schauen Sie für eine vollständige Fällen durch die Reihe. Dies ist am einfachsten zu tun, wenn Sie nur eine einzige variable von Interesse, dass-wenn Sie fehlt-bedeutet, dass die gesamte Beobachtung fehlt.
Verwende ich die folgenden Bibliotheken:
Nehmen Sie sich zuerst eine Teilmenge von Ihren wichtigsten Daten-frame (Asym), die nur die ID-variable ("NAME"), die Zeit-variable ("JAHR"), und eine interessierende variable ("X" oder "Y").
Zweite, gestalten Sie die neue Daten-frame zu machen, wide-format. Dies macht einen Daten-frame, in dem die einzelnen "NAMEN" ist eine einzelne Zeile, und "X" für jedes Jahr eine Spalte.
Dritte, vollständige.Fälle für jede Zeile. Jeder NAME mit fehlenden Daten wird komplett entfernt.
Vierten, Umgestaltung der data frame wieder ins long-format (standardmäßig gibt diese Variablen generische Namen sind, so möchten Sie vielleicht ändern Sie den Namen zurück zu dem, was Sie vorher waren).
HINWEIS: das JAHR wird eine Faktor-variable standardmäßig mit dem Ansatz. Wenn das JAHR der variable numerisch ist, werden Sie wollen, ändern Sie die variable entsprechend. Zum Beispiel:
Fünften und sechsten, nehmen Sie nur den "NAME" und "JAHR" - Variablen im data frame, den Sie erstellt haben, und dann verschmelzen Sie mit Ihrem ursprünglichen Daten-frame (und sicher sein, um die drop-Fällen in den ursprünglichen Daten-frame, der nicht gefunden werden in der d-Daten-frame, den Sie erstellt haben)
Dies ist die Lösung, die ich benutze - es macht die Nutzung der praktischen Funktionen (einschließlich der netten Zusammenführen von Fähigkeiten) von der
data.table
Paket und geht davon aus, dass Ihre Daten bereits einedata.table
Objekt. Es ist relativ einfach und hoffentlich leicht zu Folgen. Es gibt eine balanced panel mit Einträgen für jede eindeutige Kombination von "Individuen" und die "Zeit-Perioden", d.h. ein panel, wo es eine Beobachtung, die für jeden einzelnen in jeder Zeit.Beispiel Für Die Nutzung: