web-dev-qa-db-ja.com

データフレーム* tmp *置換でエラーがあり、xデータにyがあります

私は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用にまったく同じコードを作成しましたが、エラーなしで残余を問題なく保存しました。誰かが私にこれを解決するのを手伝ってくれたらありがたいです。

9

データにNAsが含まれていると感じています。この例を見てください:

_#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_を実行するために発生します。

datデータセットで_na.omit_を実行する場合(つまり、コードの最初でdat <- na.omit(dat)を実行すると、コードは機能するはずです。

11
LyzandeR

これは古いスレッドですが、おそらく同じ問題に直面している他の誰かを助けることができます。 LyzandeRの要点として、防御の最前線としてNAを確認してください。さらに、xに要因がないことを確認してください。これもエラーの原因になる可能性があります。

0