gpt4 book ai didi

r - dplyr 重铸 - 未找到变量

转载 作者:行者123 更新时间:2023-12-04 09:31:53 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Convert data from long format to wide format with multiple measure columns

(5 个回答)


3年前关闭。




首先,这里是数据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 上传播(以 tidyr 措辞)年份变量和 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) 是否有更好/更简单的方法来使用 reshape2tidyr我失踪了吗?

最佳答案

你可以试试 devel data.table 的版本可以取多个 value.var

library(data.table)#v1.9.5+
dcast(setDT(mytbldf), iso2c+country~year, value.var=c('var1', 'var2'))
# iso2c country 2011_var1 2012_var1 2013_var1 2011_var2 2012_var2 2013_var2
#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

或使用 reshape来自 base R
reshape(mytbldf, idvar=c('iso2c', 'country'), timevar='year', 
direction='wide')
# iso2c country var1.2011 var2.2011 var1.2012 var2.2012 var1.2013 var2.2013
#1 BI Burundi 4.486265 6.693711 3.939242 5.330326 4.286439 5.74737
#4 UG Uganda 3.998849 10.025680 4.606198 13.416311 4.746322 15.98136

关于 recast它只是 melt + dcast .因此,如果您没有指定 id.varmeasure.varmelt , long格式将与您预期的不同。对于 recast ,您可以指定 id.var作为
  library(reshape2)
recast(mytbldf, id.var=c('iso2c', 'country', 'year'),
iso2c+country~variable+year)
# 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

此外,如果您知道列索引,则比键入名称更容易,
 recast(mytbldf, measure.var=4:5,  iso2c+country~variable+year)
# 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

关于r - dplyr 重铸 - 未找到变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30033672/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com