以编程方式向数据框中添加新变量

5
我已经完成了这个混合效应模型:

mtcarsSub <- mtcars[,c("wt", "drat", "cyl")]
library(lme4)
mtcarsME <- lmer(drat ~ (1|cyl) + wt, data=mtcarsSub)

我现在想将模型的预测结果添加到mtcarsSub中。我可以像这样添加这些新变量:

mtcarsSub$fixed.effect <- predict(mtcarsME)
mtcarsSub$random.effect.cyl4 <- mtcarsMEFixed + ranef(mtcarsME)$cyl["4",]
mtcarsSub$random.effect.cyl6 <- mtcarsMEFixed + ranef(mtcarsME)$cyl["6",]
mtcarsSub$random.effect.cyl8 <- mtcarsMEFixed + ranef(mtcarsME)$cyl["8",]

请注意,当将来自随机效应的预测添加到mtcarsSub时,我重复了3次。如何以编程方式添加来自随机效应的预测,也许可以使用函数,也许可以在一行中完成?
1个回答

11

就像这样:

for( i in c(4,6,8) ) {
  mtcars[[ paste0("random.effect.cyl", i) ]] <- mtcarsMEFixed + ranef(mtcarsME)$cyl[as.character(i),]
}

请看? "[[<-"


3
对于懒惰的人来说,[[ 索引允许你传递字符串,而 $ 不行。因此,foo[['bar']] 等同于 foo$bar。另外一个有趣但无关紧要的事情是, [ 索引不保留名称,而 [[$ 会保留名称。 - airstrike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接