title: Reshape dataframe and add column index
body: <p>I have a dataframe that looks like this:</p>
  
  <pre><code>df = 
             b   e   t   w   e   e   n
      [1,] 219 125 125  94 172 109 172
      [2,]  78  78 250 156 172 141 140
      [3,] 250 204 296 829 265 125 203
      [4,] 406 110 172 187  63 156 109
  </code></pre>
  
  <p>When I melt it, using melt(df), I get:</p>
  
  <pre><code>df.m = 
     X1 X2 value
  1   1  b   219
  2   2  b    78
  3   3  b   250
  4   4  b   406
  5   1  e   125
  6   2  e    78
  7   3  e   204
  8   4  e   110
  9   1  t   125
  10  2  t   250
  11  3  t   296
  12  4  t   172
  13  1  w    94
  14  2  w   156
  15  3  w   829
  16  4  w   187
  17  1  e   172
  18  2  e   172
  19  3  e   265
  20  4  e    63
  21  1  e   109
  22  2  e   141
  23  3  e   125
  24  4  e   156
  25  1  n   172
  26  2  n   140
  27  3  n   203
  28  4  n   109
  </code></pre>
  
  <p>The problem is, when I want to make a boxplot of each letter, it groups it by just the letter. In the example above, there are 3 "e"s, which get clumped together. So, the formula below produces the boxplot below:</p>
  
  <pre><code>ggplot(df.m, aes(x=X2, y=value)) + 
  geom_boxplot(outlier.shape=NA) + 
  xlim('b','e','t','w','e','e','n')
  </code></pre>
  
  <p><a href="https://i.stack.imgur.com/GZrBX.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/GZrBX.png" alt="enter image description here"></a></p>
  
  <p>If I could add a column to the melted dataframe that retains the initial column index, it would be easy to make a correct boxplot. Is there a way to do this?</p>