Uwielbiam pakiet reshape2, ponieważ dzięki temu życie stało się tak łatwe. Zazwyczaj Hadley poczynił ulepszenia w swoich poprzednich pakietach, które umożliwiają usprawniony i szybszy kod. Pomyślałem, że dałbym tidyr wir i z tego, co przeczytałem, myślałem, że gather
było bardzo podobne do melt
z reshape2. Ale po przeczytaniu dokumentacji nie mogę uzyskać gather
, aby wykonać to samo zadanie, które wykonuje melt
.Porównywanie gather (tidyr) do topienia (reshape2)
Widok danych
Oto widok danych (dane rzeczywiste w dput
formularz na końcu postu):
teacher yr1.baseline pd yr1.lesson1 yr1.lesson2 yr2.lesson1 yr2.lesson2 yr2.lesson3
1 3 1/13/09 2/5/09 3/6/09 4/27/09 10/7/09 11/18/09 3/4/10
2 7 1/15/09 2/5/09 3/3/09 5/5/09 10/16/09 11/18/09 3/4/10
3 8 1/27/09 2/5/09 3/3/09 4/27/09 10/7/09 11/18/09 3/5/10
kod
Oto kod w melt
modzie , moja próba na gather
. Jak mogę zrobić gather
zrobić to samo, co melt
?
library(reshape2); library(dplyr); library(tidyr)
dat %>%
melt(id=c("teacher", "pd"), value.name="date")
dat %>%
gather(key=c(teacher, pd), value=date, -c(teacher, pd))
Pożądany Wyjście
teacher pd variable date
1 3 2/5/09 yr1.baseline 1/13/09
2 7 2/5/09 yr1.baseline 1/15/09
3 8 2/5/09 yr1.baseline 1/27/09
4 3 2/5/09 yr1.lesson1 3/6/09
5 7 2/5/09 yr1.lesson1 3/3/09
6 8 2/5/09 yr1.lesson1 3/3/09
7 3 2/5/09 yr1.lesson2 4/27/09
8 7 2/5/09 yr1.lesson2 5/5/09
9 8 2/5/09 yr1.lesson2 4/27/09
10 3 2/5/09 yr2.lesson1 10/7/09
11 7 2/5/09 yr2.lesson1 10/16/09
12 8 2/5/09 yr2.lesson1 10/7/09
13 3 2/5/09 yr2.lesson2 11/18/09
14 7 2/5/09 yr2.lesson2 11/18/09
15 8 2/5/09 yr2.lesson2 11/18/09
16 3 2/5/09 yr2.lesson3 3/4/10
17 7 2/5/09 yr2.lesson3 3/4/10
18 8 2/5/09 yr2.lesson3 3/5/10
danych
dat <- structure(list(teacher = structure(1:3, .Label = c("3", "7",
"8"), class = "factor"), yr1.baseline = structure(1:3, .Label = c("1/13/09",
"1/15/09", "1/27/09"), class = "factor"), pd = structure(c(1L,
1L, 1L), .Label = "2/5/09", class = "factor"), yr1.lesson1 = structure(c(2L,
1L, 1L), .Label = c("3/3/09", "3/6/09"), class = "factor"), yr1.lesson2 = structure(c(1L,
2L, 1L), .Label = c("4/27/09", "5/5/09"), class = "factor"),
yr2.lesson1 = structure(c(2L, 1L, 2L), .Label = c("10/16/09",
"10/7/09"), class = "factor"), yr2.lesson2 = structure(c(1L,
1L, 1L), .Label = "11/18/09", class = "factor"), yr2.lesson3 = structure(c(1L,
1L, 2L), .Label = c("3/4/10", "3/5/10"), class = "factor")), .Names = c("teacher",
"yr1.baseline", "pd", "yr1.lesson1", "yr1.lesson2", "yr2.lesson1",
"yr2.lesson2", "yr2.lesson3"), row.names = c(NA, -3L), class = "data.frame")
Być może zainteresuje Cię to [porównanie pakietów reshape2 i tidyr + dplyr] (http://rpubs.com/paul4forest/reshape2tidyrdplyr). Użyłem przykładu jakości powietrza i francuskiego frytki, aby porównać użycie funkcji topienia stopki (reshape2) i funkcji dcast() do funkcji tidyr gather() i spread() w połączeniu z funkcjami dplyr group_by() i summary(). –