创建数据框时出错:只能将0与负下标混合

时间:2019-02-10 15:12:13

标签: r dataframe

我有以下变量:CFNAIdiff(初等),HOUSTgrINDPROgrUMCSENTgrUNRATEgr(它们是增长率)。我想构建一个AR模型,并尝试通过以下方式构建数据框:

dataframe <- data.frame(y = INDPROgr[2:T], INDPROgr = INDRPOgr[1:(T-1)],
                        HOUSTgr = HOUSTgr[1:(T-1)], UMCSENTgr = UMCSENTgr[1:(T-1)],
                        UNRATEgr = UNRATEgr[1:(T-1)], CFNAIdiff = CFNAIdiff[1:(T-1)])

但是,我遇到以下问题:

  

INDPROgr [1:(T-1)]中的错误:     只能将0与负下标混合

我指定错了什么?

1 个答案:

答案 0 :(得分:1)

该错误表明您正在尝试对正数和负数进行子集化。让我们举一个简单的例子

dat <- data.frame(A = LETTERS[1:10], B = 1:10)

在本示例中,我们可以像使用自己的代码一样使用标准方法对data.frame进行子集化

dat[0:3,]

,它将返回前3行。这里0被视为空行,因此返回一个空行(与具有null的行不同)

dat[0,]

现在,如果我们错误地以变量T结束子集,并且由于某种原因该变量为0或负数,那么如果要返回任何特定的行,则会出现错误。反过来就是这种情况,以避免诸如

之类的任何冲突。
dat[c(-1,1),]

从技术上讲,它试图返回减去第一行的整个数据帧,但包括等于rbind(dat[-1,], dat[1,])的第一行。

因此,如果我们有一些功能或脚本像您的脚本一样是子集

dataframe<- data.frame( y = INDPROgr[2:T], 
                        INDPROgr = INDRPOgr[1:(T-1)], 
                        HOUSTgr = HOUSTgr[1:(T-1)], 
                        UMCSENTgr = UMCSENTgr[1:(T-1)], 
                        UNRATEgr = UNRATEgr[1:(T-1)], 
                        CFNAIdiff = CFNAIdiff[1:(T-1)])

在T要么为T-1 = -1等于0的情况下,R都会返回错误,这意味着您在子集1:(-1),或者如果T本身为负,则出于相同的原因。

因此,我建议检查代码中某处T变为负还是零。