我喜欢 reshape2 软件包,因为它让生活变得如此轻松。通常,Hadley 对他之前的软件包进行了改进,以实现精简、运行速度更快的代码。我想我应该尝试一下 tidyr,从我读到的内容来看,我认为 gather
与 melt
非常相似来自reshape2。但阅读文档后我无法得到 gather
执行与 melt
相同的任务确实如此。
数据 View
这是数据 View (帖子末尾的 dput
形式的实际数据):
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
代码
这是 melt
中的代码时尚,我的尝试gather
。我怎样才能做gather
做与 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))
所需输出
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
数据
dat <- data.frame(
teacher = factor(c("3", "7", "8")),
yr1.baseline = factor(c("1/13/09", "1/15/09", "1/27/09")),
pd = factor(c("2/5/09", "2/5/09", "2/5/09")),
yr1.lesson1 = factor(c("3/6/09", "3/3/09", "3/3/09")),
yr1.lesson2 = factor(c("4/27/09", "5/5/09", "4/27/09")),
yr2.lesson1 = factor(c("10/7/09", "10/16/09", "10/7/09")),
yr2.lesson2 = factor(c("11/18/09", "11/18/09", "11/18/09")),
yr2.lesson3 = factor(c("3/4/10", "3/4/10", "3/5/10"))
)
最佳答案
您的gather
行应如下所示:
dat %>% gather(variable, date, -teacher, -pd)
这表示“收集除 teacher
和 pd
之外的所有变量,调用新键列“变量”和新值列“日期”。”
作为解释,请注意 help(gather)
页面中的以下内容:
...: Specification of columns to gather. Use bare variable names.
Select all variables between x and z with ‘x:z’, exclude y
with ‘-y’. For more options, see the select documentation.
由于这是省略号,因此要收集的列的规范作为单独的(裸名称)参数给出。我们希望收集除 teacher
和 pd
之外的所有列,因此我们使用 -
。
关于r - 比较聚集 (tidyr) 与融化 (reshape2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536251/