r - 比较聚集 (tidyr) 与融化 (reshape2)

标签 r reshape2 tidyr

我喜欢 reshape2 软件包,因为它让生活变得如此轻松。通常,Hadley 对他之前的软件包进行了改进,以实现精简、运行速度更快的代码。我想我应该尝试一下 tidyr,从我读到的内容来看,我认为 gathermelt 非常相似来自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)

这表示“收集除 teacherpd 之外的所有变量,调用新键列“变量”和新值列“日期”。”

<小时/>

作为解释,请注意 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.

由于这是省略号,因此要收集的列的规范作为单独的(裸名称)参数给出。我们希望收集除 teacherpd 之外的所有列,因此我们使用 -

关于r - 比较聚集 (tidyr) 与融化 (reshape2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536251/

相关文章:

使用重复项 reshape 数据框

R - 将宽数据 reshape 为长数据后文件大小急剧增加

用 melt 和 acast 按索引 reshape

r - 使用自定义函数命名由 `nest` (tidyr) 创建的列中的项目

r - 如何将数据从长格式 reshape 为宽格式以实现此输出?

r - 如何使用 ID 列前缀进行透视_更长

r - 输出数据帧的循环中的错误处理

r - 如何使用 trycatch 跳过错误并转到列表中的下一个

使用 data.table 将表中的列值替换为基于 R 中匹配项的查找值

r - 将向量解包到列表中,向量的每个元素作为列表中的单独元素