数据帧错误* tmp *替换x数据有y

时间:2017-11-10 23:36:08

标签: r regression lm

我是R的初学者。这是一个非常简单的代码,我试图保存剩余的术语:

# Create variables for child's EA:

dat$cldeacdi <- rowMeans(dat[,c('cdcresp', 'cdcinv')],na.rm=T)
dat$cldeacu <- rowMeans(dat[,c('cucresp', 'cucinv')],na.rm=T)

# Create a residual score for child EA:

dat$cldearesid <- resid(lm(cldeacu ~ cldeacdi, data = dat))

我收到以下消息:

Error in `$<-.data.frame`(`*tmp*`, cldearesid, value = c(-0.18608488908881,  : 
  replacement has 366 rows, data has 367

我搜索了此错误,但找不到任何可以解决此问题的内容。另外,我为妈妈的EA创建了完全相同的代码,它保存了残差,没有错误。如果有人能帮我解决这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:9)

我觉得你的数据中有<meta name="viewport" content="width=device-width, initial-scale=1.0"> 个。看看这个例子:

NA

正如您所看到的,这会导致与您类似的错误。

作为验证:

#mtcars data set
test <- mtcars
#adding just one NA in the cyl column
test[2, 2] <- NA

#running linear model and adding the residuals to the data.frame
test$residuals <- resid(lm(mpg ~ cyl, test))
Error in `$<-.data.frame`(`*tmp*`, "residuals", value = c(0.382245430809409,  : 
  replacement has 31 rows, data has 32

这是因为length(resid(lm(mpg ~ cyl, test))) #31 nrow(test) #32 会在运行回归之前在数据集上运行lm,因此如果您有任何带NA的行,这些行将被删除,从而导致结果更少。

如果您在na.omit数据集上运行na.omit(即代码的最开头是dat,那么您的代码应该有效。

答案 1 :(得分:0)

这是一个旧线程,但这也许可以帮助其他面临相同问题的人。就LyzandeR的观点而言,检查NA是否是第一道防线。另外,请确保您在x中没有任何因素,因为这也可能导致错误。