title: Check if characters are all equal in a group using dplyr - R
body: <p>In the following data frame, how can I group by the first two columns and check if all the values in the fourth column are identical? If they are identical I would like to replace them with <code>''</code>.</p>
  
  <p>In this example, the group combinations <code>'embryonated + protein'</code> and <code>'Hatching + Lipid'</code> are the only two groups whose letters are not all <code>a</code>.</p>
  
  <pre><code>df
  
           Stage variable Temperature letters       Mean
  30 Embryonated Moisture          30       a  808.70882
  31 Embryonated      NFE          20       a   53.28806
  32 Embryonated      NFE          25       a   45.38572
  33 Embryonated      NFE          30       a   84.56113
  34 Embryonated  Protein          20      ab  118.53608
  35 Embryonated  Protein          25       b  127.29849
  36 Embryonated  Protein          30       a   84.55175
  37    Hatching      Ash          20       a   16.95345
  38    Hatching      Ash          25       a   14.54980
  39    Hatching      Ash          30       a   13.38510
  40    Hatching   Energy          20       a 4931.18857
  41    Hatching   Energy          25       a 4187.27213
  42    Hatching   Energy          30       a 4314.61171
  43    Hatching    Lipid          20       b   26.44363
  44    Hatching    Lipid          25       a   19.90928
  45    Hatching    Lipid          30      ab   22.27561
  46    Hatching Moisture          20       a  785.63062
  47    Hatching Moisture          25       a  818.69860
  48    Hatching Moisture          30       a  815.32070
  49    Hatching      NFE          20       a   60.34359
  50    Hatching      NFE          25       a   43.02979
  </code></pre>
  
  <p>I have tried using <code>dplyr</code> to no avail.</p>
  
  <pre><code>grp_cols &lt;- names(df)[c(1,2)] #group by stage and variable
  
  # Convert character vector to list of symbols
  dots &lt;- lapply(grp_cols3, as.symbol)
  
  
  res = df %&gt;% group_by(.dots=dots) %&gt;% 
    do(k=all(letters=='a')) #(returns all groups as `FALSE`)
  </code></pre>
  
  <p>Data:</p>
  
  <pre><code>dput(df)
  
  structure(list(Stage = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
  3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Developing", 
  "Embryonated", "Hatching", "Laid"), class = "factor"), variable = structure(c(1L, 
  5L, 5L, 5L, 2L, 2L, 2L, 4L, 4L, 4L, 6L, 6L, 6L, 3L, 3L, 3L, 1L, 
  1L, 1L, 5L, 5L), .Label = c("Moisture", "Protein", "Lipid", "Ash", 
  "NFE", "Energy"), class = "factor"), Temperature = c("30", "20", 
  "25", "30", "20", "25", "30", "20", "25", "30", "20", "25", "30", 
  "20", "25", "30", "20", "25", "30", "20", "25"), letters = c("a", 
  "a", "a", "a", "ab", "b", "a", "a", "a", "a", "a", "a", "a", 
  "b", "a", "ab", "a", "a", "a", "a", "a"), Mean = c(808.708818349727, 
  53.2880626188374, 45.3857220182952, 84.5611267892406, 118.536080769588, 
  127.298486932385, 84.5517498179938, 16.9534468121571, 14.5497954869813, 
  13.3850951354759, 4931.18857123979, 4187.27213494545, 4314.61171127083, 
  26.4436265667305, 19.9092762683653, 22.2756088142943, 785.630624024365, 
  818.698598619779, 815.320702070777, 60.3435858953567, 43.0297881562102
  )), .Names = c("Stage", "variable", "Temperature", "letters", 
  "Mean"), row.names = 30:50, class = "data.frame")
  </code></pre>