2017-11-10 229 views
1

我在R.初學者這是一個非常簡單的代碼,我正在努力挽救殘差項:錯誤在數據幀* TMP *替換爲X的數據都有Ÿ

# 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創建了完全相同的代碼,並且保存了殘差,沒有錯誤。如果有人能幫我解決這個問題,我將不勝感激。

回答

1

我有一種感覺,你在你的數據中有NA s。看看這個例子:

#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.omit,因此,如果您有任何NA行這些都將被淘汰,導致較少的結果。

如果您在dat數據集運行na.omit(即dat <- na.omit(dat)在你的代碼的最開始那麼你的代碼應該工作。

+0

謝謝你這麼多!你上點是對的! –

+0

很高興能幫助你。 – LyzandeR

+0

其實,我剛剛注意到,當我運行na.omit時,它會清除我的數據集,就像在-0變量中觀察我的變量...爲什麼會這樣? –