代码之家  ›  专栏  ›  技术社区  ›  Marishka Usacheva

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

  •  15
  • Marishka Usacheva  · 技术社区  · 7 年前

    # 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
    

    我搜索了此错误,但找不到任何可以解决此问题的方法。此外,我为mom的EA创建了完全相同的代码,它很好地保存了剩余的代码,没有任何错误。如果有人能帮我解决这个问题,我将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  16
  •   LyzandeR    7 年前

    我有种感觉你有 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的行,这些行将被消除,从而导致更少的结果。

    如果你跑步 不适用。省略 在您的 dat 数据集(即。 dat <- na.omit(dat) 在代码的最开始,您的代码应该可以工作。

        2
  •  2
  •   Dawson A. Verley    5 年前

    这是一条古老的线索,但也许这可以帮助其他人面对同样的问题。对于LyzandeR的观点,检查NA作为第一道防线。此外,确保没有任何因素 x