For循环不会以数据帧格式重复结果

For循环不会以数据帧格式重复结果,r,R,我希望以数据框格式返回2009年至2017年的结果,其中每年的列名称和行名称分别为0.25、0.5和0.75,但我的代码仅返回2009年的结果 for (y in 2009:2017){ i <- filter(proj, Year.of.Inflow==y) y <- quantile(i$Gross.Salary, probs = c(0.25,0.5,0.75)) return(as.data.frame(y)) } 仅使用baseR函数,您可以使用by函数按组执

我希望以数据框格式返回2009年至2017年的结果,其中每年的列名称和行名称分别为0.25、0.5和0.75,但我的代码仅返回2009年的结果

for (y in 2009:2017){
  i <- filter(proj, Year.of.Inflow==y)
  y <- quantile(i$Gross.Salary, probs = c(0.25,0.5,0.75))
  return(as.data.frame(y))
}

仅使用
base
R函数,您可以使用
by
函数按组执行函数,然后
cbind
将结果列表放入data.frame,如下所示:

do.call(cbind, 
    by(proj$Gross.Salary, proj$Year.of.Inflow, 
        function(x) quantile(x, c(0.25,0.5,0.75)))
)
样本数据:

set.seed(0L)
yrs <- rep(2009:2017, each=10)
proj <- data.frame(Year.of.Inflow=yrs, Gross.Salary=runif(length(yrs))*1e6)

如果您将
cbind
替换为
rbind
,您将根据OP的要求获得列形式的年份。
set.seed(0L)
yrs <- rep(2009:2017, each=10)
proj <- data.frame(Year.of.Inflow=yrs, Gross.Salary=runif(length(yrs))*1e6)
        2009     2010     2011     2012     2013     2014     2015     2016
25% 422306.3 249489.7 225912.1 375781.8 490352.4 262665.9 303301.2 357510.0
50% 644955.9 440901.5 384251.0 546553.6 600048.3 457858.4 432948.0 626836.0
75% 897966.6 709969.6 746002.4 709899.9 770278.0 626162.4 607789.2 858114.7
        2017
25% 265454.4
50% 417326.9
75% 712166.3