Expandir los rangos definidos por las columnas "desde" y "hasta"
Tengo un marco de datos que contiene"name"
de los presidentes de los Estados Unidos, los años en que comienzan y terminan en el cargo, ("from"
y"to"
columnas). Aquí hay una muestra:
name from to
Bill Clinton 1993 2001
George W. Bush 2001 2009
Barack Obama 2009 2012
... y la salida dedput
:
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")
Quiero crear un marco de datos con dos columnas ("name"
y"year"
), con una fila por cada año que un presidente estuvo en el cargo. Por lo tanto, necesito crear una secuencia regular con cada año a partir de "from
", a"to"
. Aquí está mi salida:
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
Sé que puedo usardata.frame(name = "Bill Clinton", year = seq(1993, 2001))
para expandir las cosas para un solo presidente, pero no puedo averiguar cómo iterar para cada presidente.
¿Cómo hago esto? Siento que debería saber esto, pero me estoy quedando en blanco.
Actualización 1OK, he intentado ambas soluciones y recibo un error:
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