2017-06-06 1 views
1

Ich habe einen Datenrahmen mit Panel-Daten und ich möchte alle vollständigen Beobachtungen basierend auf einem Formular erhalten.Erhalten Sie vollständige Fälle von Datenrahmen basierend auf Formular

Während das Extrahieren der Variablen aus der Formel ziemlich einfach ist (mit get_all_vars), möchte ich auch Dinge wie Verzögerungen (in diesem Fall aus dem dplyr-Paket) in Formeln einbauen.

Lassen Sie uns das Formular nehmen:

y ~ x1 + lag(x2, 1) + lag(x3, 2) 

und den Datenrahmen

y x1 x2 x3 
1 2 3 NA NA 
2 3 2 2 2 
3 2 6 5 3 
4 5 8 6 9 
5 1 3 7 4 
6 1 0 1 2 

Ich möchte so etwas bekommen:

y x1 x2 x3 
1 2 3 NA NA 
2 3 2 NA NA 
3 2 6 2 NA 
4 5 8 5 2 
5 1 3 6 3 
6 1 0 7 9 

Am Ende möchte ich nutzen das schafft Dummies für die verschiedenen Zeiträume (und da mein Panel unausgewogen ist und seit einigen Jahren kein Fall mehr abgeschlossen ist, sie für alle Perioden zu erstellen funktioniert nicht).

Irgendwelche Vorschläge?

+0

Sie verwenden können, 'model.matrix' statt' get_all_vars' erreichen. 'model.matrix (~ y + x1 + Verzögerung (x2, 1) + Verzögerung (x3, 2), Daten = df)' –

+0

Danke, aber das ist nicht wirklich was ich will. Zuerst muss ich die Formel umschreiben (sonst bekomme ich keine), zweitens möchte ich die ganzen Daten einschließlich der Fälle mit NAs haben. Ansonsten ist es nicht so einfach, die Spalte mit den Jahren an den Datensatz zu binden und daraus die Dummies zu erstellen. Zusätzliche Frage: Passt das auf die Panel-Struktur? Z.B. wenn es um Verzögerungen geht. –

+0

In diesem Fall denke ich nur daran, eine neue Variable für jeden der Begriffe in der Formel zu erstellen. –

Antwort

2

Sie können Ihre Beispielausgabe gegeben Sie Abtastwerteingang mit model.frame

my_df <- read.table(text=" y x1 x2 x3 
         1 2 3 NA NA 
         2 3 2 2 2 
         3 2 6 5 3 
         4 5 8 6 9 
         5 1 3 7 4 
         6 1 0 1 2 ", header=T) 

out_df <- model.frame(y ~ x1 + dplyr::lag(x2, 1) + dplyr::lag(x3, 2), 
         data=my_df, 
         na.action=NULL) 
names(out_df) <- names(my_df) 
out_df 

#output 
    y x1 x2 x3 
    1 2 3 NA NA 
    2 3 2 NA NA 
    3 2 6 2 NA 
    4 5 8 5 2 
    5 1 3 6 3 
    6 1 0 7 9 
+0

Danke, sieht genau das aus, was ich gesucht habe! –

+1

Nun, leider funktioniert es nicht genau so wie es soll. Es wird nicht auf die Plattenstruktur geachtet, d. H. Die Verzögerungen sind über Querschnitte hinweg verschoben. edit: Ich vermute in Kombination mit anderen Funktionen des dplyr kann ich das Problem lösen! –

+0

froh, es zu hören. Wenn es Ihren Use Case auf andere Weise nicht erfüllt, schreiben Sie bitte die gewünschte Ausgabe und ich bin sicher, jemand auf SO kann helfen –

Verwandte Themen