我有一个R数据帧,我想为每个分位数应用估算函数。以下是lm()
的示例:
df <- data.frame(Y = sample(100), X1 = sample(100), X2 = sample(100))
estFun <- function(df){lm(Y ~ X1 + X2, data = df)}
如果我将其分成中间两侧的两个子集,我用两行来管理:
fitsLo <- estFun(df[df$Y < median(df$Y),])
fitsHi <- estFun(df[df$Y > median(df$Y),])
但是,我想找到一个更通用的解决方案,我可以随意选择分位数,也许用lapply()
形成一个拟合列表。
答案 0 :(得分:3)
您可以将findInterval
与by
;
by(df,findInterval(df$Y,quantile(df$Y,c(0.25,0.5,0.75))),estFun)
答案 1 :(得分:2)
尝试
df$grp <- with(df, cut(Y, breaks=quantile(Y)))
by(df, df$grp, FUN=estFun)