【发布时间】:2015-10-25 14:43:22
【问题描述】:
我有一个面板结构的数据框:两年内每个单元的 2 次观察:
library(tidyr)
mydf <- data.frame(
id = rep(1:3, rep(2,3)),
year = rep(c(2012, 2013), 3),
value = runif(6)
)
mydf
# id year value
#1 1 2012 0.09668064
#2 1 2013 0.62739399
#3 2 2012 0.45618433
#4 2 2013 0.60347152
#5 3 2012 0.84537624
#6 3 2013 0.33466030
我想将这些数据重塑为宽格式,这可以通过tidyr::spread 轻松完成。但是,由于year 变量的值是数字,我的新变量的名称也变成了数字,这使得它的进一步使用变得更加困难。
spread(mydf, year, value)
# id 2012 2013
#1 1 0.09668064 0.6273940
#2 2 0.45618433 0.6034715
#3 3 0.84537624 0.3346603
我知道我可以轻松地重命名这些列。但是,如果我想用其他操作在链中重塑,那就不方便了。例如。下面这行显然没有意义。
library(dplyr)
mydf %>% spread(year, value) %>% filter(2012 > 0.5)
以下有效,但不是那么简洁:
tmp <- spread(mydf, year, value)
names(tmp) <- c("id", "y2012", "y2013")
filter(tmp, y2012 > 0.5)
知道如何更改spread 中的新变量名称吗?
【问题讨论】: