我有一个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
。
有什么建议吗?我尝试的一切都没有成功(给出了一个新的错误)。
答案 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")