2015-06-23 66 views
1

我有一个R数据框,我想对每个分位数应用一个估计函数。下面是与lm()一个例子:将函数应用于R数据框的每个分位数

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),]) 

不过,我想找到一个更普遍解决方案,我可以任意选择分位数的数量,也可以用一个拟合列表来构建。

+2

可能是你需要'?有假期,因为'?quantile' cut',作为分组列和使用的聚合功能之一。试试'df $ grp < - with(df,cut(Y,breaks = quantile(Y))); (df,df $ grp,FUN = estFun)' – akrun

回答

3

您可以使用findInterval结合by;

by(df,findInterval(df$Y,quantile(df$Y,c(0.25,0.5,0.75))),estFun) 
2

尝试

df$grp <- with(df, cut(Y, breaks=quantile(Y))) 
by(df, df$grp, FUN=estFun) 
相关问题