reshape函数给出“下标越界”错误

时间:2012-10-21 14:41:59

标签: r reshape reshape2

我有一个ROC.Value数据框,如下所示:

Years   1           2   3       4   5
2002    3.000000    NA  0.22    NA      0
2003    2.988000    NA  0.22    NA      0
2004    2.993976    NA  0.22    NA      0
2005    3.071819    NA  0.22    NA      NA
2006    3.314493    NA  0.22    NA      NA
2007    3.526621    NA  0.22    NA      NA
2008    3.583047    NA  0.22    NA      NA
2009    4.109754    NA  0.22    NA      NA
2010    4.085096    NA  0.22    3.00    NA
2011    3.885096    NA  0.22    2.85    NA
2012    3.685096    NA  0.22    2.70    NA
2013    3.485096    NA  0.22    2.55    NA
2014    3.285096    NA  0.22    2.40    NA
2015    3.085096    NA  0.22    2.25    NA
2016    2.885096    NA  0.22    2.10    NA
2017    2.685096    NA  0.22    1.95    NA
2018    2.485096    NA  0.22    1.80    NA
2019    2.285096    NA  0.22    1.65    NA
2020    2.085096    NA  0.22    1.50    NA
2021    1.885096    NA  0.22    1.50    NA

当我得到正确的数据时,NA值将被替换。

当我使用以下代码尝试将其转换为长格式时(因此我可以制作堆叠的盒子图):

m.ROC.Value = reshape(ROC.Value, 
                  idvar="Years", 
                  direction="long", 
                  varying=list(colnames(ROC.Value[2:6])),
                  timevar="Characteristic"
                  )

我收到此错误Error in reshapeLong(data, idvar = idvar, timevar = timevar, varying = varying, : subscript out of bounds

有什么建议吗?我尝试的一切都没有成功(给出了一个新的错误)。

2 个答案:

答案 0 :(得分:2)

函数reshape是R的基函数,而不是reshape2的函数。如果要使用reshape2,请使用以下命令:

melt(as.data.frame(ROC.Value), measure.vars = 2:6)

答案 1 :(得分:0)

这是一个愚蠢的工作 - 但它有效。 我没有立即添加年份列,而是在使用melt()函数后添加了它。

#Don't add years here
#ROC.Value = cbind(years, Buy.Out.Value, Recycled.Green.Premium, Levy.Exemption.Certificate, Energy.Value, CO2.Price, deparse.level = 1)
ROC.Value = cbind(Buy.Out.Value, Recycled.Green.Premium, Levy.Exemption.Certificate, Energy.Value, CO2.Price, deparse.level = 1)
m.ROC.Value = melt(ROC.Value)
#Add years here (runs from 2002, so using id+2001)
m.ROC.Value = cbind(m.ROC.Value, m.ROC.Value$Var1 + rep(2001, 100))
colnames(m.ROC.Value) = c("id", "measure", "value", "years")