【发布时间】:2015-07-14 01:08:55
【问题描述】:
首先,这是我正在使用的数据tbl_df(简化):
> mytbldf
Source: local data frame [6 x 5]
iso2c country year var1 var2
1 BI Burundi 2011 4.486265 6.693711
2 BI Burundi 2012 3.939242 5.330326
3 BI Burundi 2013 4.286439 5.747370
4 UG Uganda 2011 3.998849 10.025680
5 UG Uganda 2012 4.606198 13.416311
6 UG Uganda 2013 4.746322 15.981362
我想将年份变量分布在var1 和var2 上(用简洁的措辞)。
经过一些(...)迭代后,我发现了一种有效的语法:
> recast(mytbldf, iso2c + country ~ variable + year, measure.var = c("var1","var2"))
iso2c country var1_2011 var1_2012 var1_2013 var2_2011 var2_2012 var2_2013
1 BI Burundi 4.486265 3.939242 4.286439 6.693711 5.330326 5.74737
2 UG Uganda 3.998849 4.606198 4.746322 10.025680 13.416311 15.98136
三个问题:
1)如果我不指定measure.var =,我会收到以下错误:
> recast(mytbldf, iso2c + country ~ variable + year)
Using iso2c, country as id variables
Error in eval(expr, envir, enclos) : object 'year' not found
这是为什么呢?从recast 的人看来,我认为它会将measure.var 作为所有其他变量?
2) 那么,有没有办法避免指定measure.var?在我的真实案例中,有太多变量名称太长,无法显式指定它们。
3) 有没有更好/更简单的方法来使用我缺少的reshape2 或tidyr?
【问题讨论】:
-
回复:你的第三个问题,我认为
tidyr没有。在tidyr中执行此操作需要为您要传播的每个变量单独调用spread(在您的示例中为两个,但在您的实际数据中听起来更多),然后组合结果。根据Hadley's tidy data paper的说法,你的数据已经很整齐了,这可能是不支持这种操作的原因。 -
@SamFirke:你是对的,数据确实已经很整洁了。我现在需要做的是最后一步,我必须在其中生成可以注入 XLS 电子表格的(凌乱的)输出