У меня есть кадр данных, содержащий "name"
президентов США, годы, когда они начинаются и заканчиваются в офисе (столбцы "from"
и "to"
). Вот пример:
name from to
Bill Clinton 1993 2001
George W. Bush 2001 2009
Barack Obama 2009 2012
... и вывод из dput
:
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")
Я хочу создать кадр данных с двумя столбцами ("name"
и "year"
), с каждой строкой на каждый год, когда президент находился на своем посту. Таким образом, мне нужно создать регулярную последовательность с каждым годом от "from
" до "to"
. Здесь я ожидал:
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
Я знаю, что могу использовать data.frame(name = "Bill Clinton", year = seq(1993, 2001))
для расширения возможностей для одного президента, но я не могу понять, как итерации для каждого президента.
Как мне это сделать? Я чувствую, что должен это знать, но я рисую пробел.
Обновление 1
Хорошо, я пробовал оба решения, и я получаю сообщение об ошибке:
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