Erweitern Sie Bereiche, die durch die Spalten "von" und "bis" definiert sind

Ich habe einen Datenrahmen mit"name" der US-Präsidenten, die Jahre, in denen sie im Amt beginnen und enden, ("from" und"to" Säulen). Hier ist ein Beispiel:

name           from  to
Bill Clinton   1993 2001
George W. Bush 2001 2009
Barack Obama   2009 2012

... und die Ausgabe vondput:

dput(tail(presidents, 3))
structure(list(name = c("Bill Clinton", "George W. Bush", "Barack Obama"
), from = c(1993, 2001, 2009), to = c(2001, 2009, 2012)), .Names = c("name", 
"from", "to"), row.names = 42:44, class = "data.frame")

Ich möchte einen Datenrahmen mit zwei Spalten erstellen ("name" und"year"), mit einer Reihe für jedes Jahr, in dem ein Präsident im Amt war. Daher muss ich mit jedem Jahr eine regelmäßige Sequenz erstellen von "from", zu"to". Hier ist meine Erwartung:

name           year
Bill Clinton   1993
Bill Clinton   1994
...
Bill Clinton   2000
Bill Clinton   2001
George W. Bush 2001
George W. Bush 2002
... 
George W. Bush 2008
George W. Bush 2009
Barack Obama   2009
Barack Obama   2010
Barack Obama   2011
Barack Obama   2012

Ich weiß, dass ich verwenden kanndata.frame(name = "Bill Clinton", year = seq(1993, 2001)) Dinge für einen einzelnen Präsidenten zu erweitern, aber ich kann nicht herausfinden, wie man für jeden Präsidenten iteriert.

Wie mache ich das? Ich habe das Gefühl, dass ich das wissen sollte, aber ich zeichne eine Lücke.

Update 1

OK, ich habe beide Lösungen ausprobiert und erhalte eine Fehlermeldung:

foo<-structure(list(name = c("Grover Cleveland", "Benjamin Harrison", "Grover Cleveland"), from = c(1885, 1889, 1893), to = c(1889, 1893, 1897)), .Names = c("name", "from", "to"), row.names = 22:24, class = "data.frame")
ddply(foo, "name", summarise, year = seq(from, to))
Error in seq.default(from, to) : 'from' must be of length 1

Antworten auf die Frage(5)

Ihre Antwort auf die Frage