我喜欢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)
期望的输出 …
我有一个包含多个时间序列返回的数据框,存储在列中.
第一列包含日期,后续列是独立的时间序列,每个列都有一个名称.列标题是变量名称.
## I have a data frame like this
t <- seq(as.Date('2009-01-01'),by='days',length=10)
X <- rnorm(10,0,1)
Y <- rnorm(10,0,2)
Z <- rnorm(10,0,4)
dat <- data.frame(t,X,Y,Z)
## which appears as
t X Y Z
1 2009-01-01 -1.8763317 -0.1885183 -6.655663
2 2009-01-02 -1.3566227 -2.1851226 -3.863576
3 2009-01-03 -1.3447188 2.4180249 -1.543931
Run Code Online (Sandbox Code Playgroud)
我想将每个时间序列绘制成一个单独的图上的一条线,在一个点阵中,每个图用变量名标记.
要使用晶格绘制此图,数据必须采用高格式,如下所示:
t symbol price
1 2009-01-01 X -1.8763317
2 2009-01-02 Y -0.1885183
2 2009-01-02 Z -6.655663
Run Code Online (Sandbox Code Playgroud)
这样做有什么好的函数调用?