我喜欢reshape2套餐,因为它让生活如此轻松.通常,Hadley在之前的软件包中进行了改进,从而实现了简化,运行速度更快的代码.我想我给tidyr一抡,并从我读我认为gather是非常相似melt的reshape2.但在阅读完文档后,我无法gather完成相同的任务melt.
数据视图
这是一个数据视图(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
Run Code Online (Sandbox Code Playgroud)
码
这是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))
Run Code Online (Sandbox Code Playgroud)
期望的输出 …
请考虑以下代码:
set.seed(1)
M = matrix(rnorm(9), ncol = 3)
dimnames(M) = list(LETTERS[1:3], LETTERS[1:3])
print(M)
A B C
A -0.6264538 1.5952808 0.4874291
B 0.1836433 0.3295078 0.7383247
C -0.8356286 -0.8204684 0.5757814
melt(M)
Var1 Var2 value
1 A A -0.6264538
2 B A 0.1836433
3 C A -0.8356286
4 A B 1.5952808
5 B B 0.3295078
6 C B -0.8204684
7 A C 0.4874291
8 B C 0.7383247
9 C C 0.5757814
Run Code Online (Sandbox Code Playgroud)
如果我melt使用a 调用data.frame,我会得到不同的结果:
DF = data.frame(M)
melt(DF)
variable value …Run Code Online (Sandbox Code Playgroud)