簡體   English   中英

R - 使用組內的回歸函數

[英]R - using regression functions within a group

假設我有一個帶有三個變量df$xdf$ydf$z的數據幀df ,並且有一個分組變量df$g

通常,為了計算每組中的函數,我執行以下操作

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

現在假設我想生成的回歸殘差xyz內組中的每個值g ,我該如何實現呢?

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

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

執行以前的WITHIN組操作的一個解決方案是在`df $ g'的唯一元素上使用循環,但是如果有任何矢量化解決方案那將是很好的。

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

data.table可以使用by

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


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM