2013-06-12 2 views
4

Я пытаюсь поставить остатки от пленки обратно в исходное data.frame:R: Как включить остатки lm обратно в data.frame?

fit <- lm(y ~ x, data = mydata, weight = ind) 
mydata$resid <- fit$resid 

Вторая линия будет нормально работать, если остаток имеет ту же длину, как количество строк MyData. Однако, в моем случае, некоторые из элементов ind: NA. Поэтому остаточная длина обычно меньше числа строк. Также fit$resid - это вектор «числовой», поэтому для меня нет метки, чтобы объединить его с mydata data.frame. Есть ли элегантный способ достичь этого?

ответ

7

Я думаю, что это должно быть довольно легко, если ind - это всего лишь вектор.

sel <- which(!is.na(ind)) 
mydata$resid <- NA 
mydata$resid[sel] <- fit$resid 
+5

В качестве альтернативы, модель может быть помещена в 'lm (..., na.action = na.exclude)'. 'Остатки()' затем будут помещать свой вывод в 'NA's для пропущенных случаев - см. [этот ответ] (http://stats.stackexchange.com/a/11028/1909). – caracal

+0

Я думал, что это работает только для NA в data.frame, а не в массиве весов, которые не находятся в data.frame. – John

+0

По-видимому, он работает для весов, см. [Http://pastebin.com/0VUd68cz](http://pastebin.com/0VUd68cz). Хотя я не исследовал это очень тщательно. – caracal