2013-08-04 40 views
3

內使用迴歸函數假設我有一個數據幀df用三個變量df$xdf$ydf$z,並有一個分組變量df$g的R - 基團

通常情況下,計算函數中的每一個組,我做了以下

df$new<-unlist(tapply(df$x,df$g,FUN=myfunc)) 

現在假設我要生成的yzx迴歸殘差組內g的每一個值,我該怎麼辦執行它?

更具體地說,不使用組,我會做

df$new<-resid(lm(df$x ~ df$y + df$z, na.action, na.exclude)) 

一個解決方案來進行前面的操作中的組被使用過的`DF $ G」的獨特元素的循環,但它會如果有任何矢量化解決方案,那就太好了。

+0

你從plyr包'ddply'檢查? – Metrics

+2

檢查最後一個例子在'?by' – Henrik

+0

[This post](http://stackoverflow.com/questions/16232138/r-creating-models-on-subsets-with-data-table-inside-a-function)may有一些幫助。 – Arun

回答

1
library(plyr) 
ddply(mydata,.(g),transform, new=resid(lm(x ~ y + z, na.action, na.exclude))) 

使用mtcars數據測試:

mydata<-mtcars 

myres<-ddply(mydata,.(carb),transform, new=resid(lm(mpg ~ disp + hp))) # g=carb, x=mpg,y=disp,z=hp 
> head(myres) 
    mpg cyl disp hp drat wt qsec vs am gear carb   new 
1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 0.20604566 
2 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 2.03023747 
3 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 -2.39754247 
4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 1.31212635 
5 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 2.60271481 
6 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 0.03913515 
1

data.table你可以使用by

library(data.table) 
DT <- data.table(df) 


DT[, new := resid(lm(x ~ y + z, na.action, na.exclude)), by = g]