gpt4 book ai didi

r - 数据帧 *tmp* 替换中有 x 数据有 y 时出错

转载 作者:行者123 更新时间:2023-12-02 15:01:11 26 4
gpt4 key购买 nike

我是 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 创建了完全相同的代码,它很好地保存了残差,没有错误。如果有人能帮我解决这个问题,我将不胜感激。

最佳答案

我有一种感觉,你有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.omit在运行回归之前对数据集进行分析,因此如果您有任何带有 NA 的行,这些行将被消除,从而导致结果较少。

如果你运行na.omit在您的dat上数据集(即 dat <- na.omit(dat) 在代码的最开头,那么您的代码应该可以工作。

关于r - 数据帧 *tmp* 替换中有 x 数据有 y 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47232728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com