Rozszerz zakresy zdefiniowane przez kolumny „z” i „do”
Mam ramkę danych zawierającą"name"
prezydentów USA, lata, kiedy zaczynają i kończą w biurze, ("from"
i"to"
kolumny). Oto przykład:
name from to
Bill Clinton 1993 2001
George W. Bush 2001 2009
Barack Obama 2009 2012
... i wyjście zdput
:
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")
Chcę utworzyć ramkę danych z dwiema kolumnami ("name"
i"year"
), z rzędu za każdy rok, w którym prezydent sprawował urząd. Dlatego muszę tworzyć regularną sekwencję z każdego roku odfrom
", do"to"
. Oto moje oczekiwane:
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
Wiem, że mogę użyćdata.frame(name = "Bill Clinton", year = seq(1993, 2001))
rozwinąć rzeczy dla jednego prezydenta, ale nie mogę wymyślić, jak powtarzać dla każdego prezydenta.
Jak mam to zrobic? Czuję, że powinienem to wiedzieć, ale rysuję puste.
Aktualizacja 1OK, wypróbowałem oba rozwiązania i pojawia się błąd:
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