Expandir intervalos definidos pelas colunas "de" e "para"
Eu tenho um quadro de dados contendo"name"
Presidentes dos EUA, os anos em que começam e terminam no cargo, ("from"
e"to"
colunas). Aqui está uma amostra:
name from to
Bill Clinton 1993 2001
George W. Bush 2001 2009
Barack Obama 2009 2012
... e a saída 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")
Eu quero criar um quadro de dados com duas colunas ("name"
e"year"
), com uma linha para cada ano em que um presidente estava no cargo. Assim, eu preciso criar uma sequência regular a cada ano a partir de "from
", para"to"
. Aqui está minha saída esperada:
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
Eu sei que eu posso usardata.frame(name = "Bill Clinton", year = seq(1993, 2001))
expandir as coisas para um único presidente, mas não consigo descobrir como fazer uma iteração para cada presidente.
Como eu faço isso? Eu sinto que eu deveria saber disso, mas estou desenhando um espaço em branco.
Atualização 1OK, eu tentei as duas soluções e estou recebendo um erro:
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