Ich möchte neue Zeilen in einem dat.frame für alle fehlenden Jahre für jede Gruppe (Firma und Typ) erstellen. Die Datenrahmen sieht wie folgt aus:Fügen Sie Zeilen mit fehlenden Jahren nach Gruppe hinzu
minimal <- data.frame(firm = c("A","A","A","B","B","B","A","A","A","B","B","B"),
type = c("X","X","X","X","X","X","Y","Y","Y","Y","Y","Y"),
year = c(2000,2004,2007,2010,2008,2001,2002,2003,2007,2000,2001,2008),
value = c(1,3,7,9,9,2,3,3,7,5,9,15)
)
Datenrahmen:
firm type year value
A X 2000 1
A X 2004 3
A X 2007 7
B X 2010 9
B X 2008 9
B X 2001 2
A Y 2002 3
A Y 2003 3
A Y 2007 7
B Y 2000 5
B Y 2001 9
B Y 2008 15
Nun, was ich will, ist folgendes zu erhalten: Ich kann in den Daten sehen, dass die Mindest-Jahr 2000 ist und das Maximum 2010. Ich möchte eine Zeile für jedes fehlende Jahr für jede Kombination von Unternehmen hinzufügen. Zum Beispiel für Unternehmen A und Typ X, würde Ich mag Zeilen hinzufügen, so dass es wie folgt aussieht:
fertige Ausgabe:
firm type year value
A X 2000 1
A X 2004 3
A X 2007 7
A X 2001 1
A X 2002 1
A X 2003 1
A X 2005 3
A X 2006 3
A X 2008 7
A X 2009 7
A X 2010 7
Zusätzlich möchte ich den Wert aus dem Vorjahr in die Spalte schreiben ' Wert 'für die fehlende Zeile für alle folgenden Jahre, bis eine neue nicht fehlende Zeile erscheint (wie im letzten Ausgabebeispiel zu sehen).
Ich habe noch nicht mit nützlichem Code kommen, aber was ich bisher ist folgende festgestellt, die die richtige Richtung sein könnten:
setDT(minimal)[, .SD[match(2000:2010, year)],
by = c("firm","type")]
ich nicht wirklich das Konzept der setDT verstehen und .SD, aber dies erzeugt mindestens eine Zeile für jede Firm-Typ-Kombination. Es gibt jedoch keinen Inhalt für das Jahr.
Vielen Dank im Voraus!
Ich denke, es gibt Betrüger dafür. Überprüfen Sie, ob '' complete' ''tidyr'' oder '' expand.grid '' 'base R'' oder' CJ' von 'data.table' ist. – akrun
Okay, ich habe 'min2 <- expand.grid (year = min (minimales $ Jahr): max (minimales $ Jahr), fest = einzigartig (minimal $ fest), typ = eindeutig (minimal $ type)) ' und' merge (min2, minimal, durch = c ("Firma", "Typ "," Jahr "), all.x = T)'. Jetzt muss ich nur noch die richtigen Werte zu jeder Zeile hinzufügen, was ich jetzt noch nicht mache. – Rnewbie
versuchen Sie dies: 'Bibliothek (dplyr); Bibliothek (Tidyr); minimal%>% group_by (Firma, Typ)%>% komplett (Jahr = full_seq (Jahr, 1))%>% fill (Wert) ' – Sotos