title: avoiding nested sapply when collapsing variable in data.frame with multiple factors
body: <p>I have a dataframe with multiple factors and multiple numeric vars. I would like to collapse one of the factors (say by mean).</p>
  
  <p>In my attempts I could only think of nested sapply or for loops to isolate the numerical elements to be averaged.</p>
  
  <pre><code>var &lt;- data.frame(A = c(rep('a',8),rep('b',8)), B = 
  c(rep(c(rep('c',2),rep('d',2)),4)), C = c(rep(c('e','f'),8)),
                    D = rnorm(16), E = rnorm(16))
  &gt; var
     A B C           D           E
  1  a c e  1.1601720731 -0.57092435
  2  a c f -0.0120178626  1.05003748
  3  a d e  0.5311032778  1.67867806
  4  a d f -0.3399901000  0.01459940
  5  a c e -0.2887561691 -0.03847519
  6  a c f  0.0004299922 -0.36695879
  7  a d e  0.8124655890  0.05444033
  8  a d f -0.3777058654  1.34074427
  9  b c e  0.7380720821  0.37708543
  10 b c f -0.3163496271  0.10921373
  11 b d e -0.5543252191  0.35020193
  12 b d f -0.5753686426  0.54642790
  13 b c e -1.9973216646  0.63597405
  14 b c f -0.3728926714 -3.07669300
  15 b d e -0.6461596329 -0.61659041
  16 b d f -1.7902722068 -1.06761729
  
  
  sapply(4:ncol(var), function(i){
    sapply(1:length(levels(var$A)), function(j){
      sapply(1:length(levels(var$B)), function(t){
        sapply(1:length(levels(var$C)), function(z){
          mean(var[var$A == levels(var$A)[j] &amp; 
  var$B == levels(var$B)[t] &amp; 
  var$C == levels(var$C)[z],i])
        })
      })
    })
  })
  
               [,1]       [,2]
  [1,]  0.435707952 -0.3046998
  [2,] -0.005793935  0.3415393
  [3,]  0.671784433  0.8665592
  [4,] -0.358847983  0.6776718
  [5,] -0.629624791  0.5065297
  [6,] -0.344621149 -1.4837396
  [7,] -0.600242426 -0.1331942
  [8,] -1.182820425 -0.2605947
  </code></pre>
  
  <p>Is there a way to do this without this many sapply? maybe with mapply or outer</p>