title: Reshaping several variables wide with cast
body: <p>I have a data.frame that looks like this:</p>
  
  <pre><code>&gt; head(ff.df)
    .id pio caremgmt prev price surveyNum
  1   1   2        2    1     2         1
  2   1   2        1    2     1         2
  3   1   1        1    2     2         3
  4   1   2        2    1     5         4
  5   1   1        1    1     3         5
  6   1   1        2    2     4         6
  </code></pre>
  
  <p>I'd like to reshape all four non-id variables wide by id.  In other words, I want colnames:</p>
  
  <pre><code>surveyNum pio1 pio2 pio3 caremgmt1 caremgmt2 caremgmt3 prev1 prev2 prev3 price1 price2 price3
  </code></pre>
  
  <p>I can do that for a single variable:</p>
  
  <pre><code>&gt; cast( ff.df, surveyNum~.id, value=c("pio"))
     surveyNum 1 2 3
  1          1 2 2 2
  2          2 2 1 2
  3          3 1 2 1
  4          4 2 1 1
  5          5 1 2 2
  6          6 1 2 1
  7          7 1 1 2
  8          8 2 2 1
  9          9 1 1 2
  10        10 1 1 1
  11        11 2 2 1
  12        12 1 2 2
  13        13 1 1 1
  14        14 2 1 1
  15        15 1 2 1
  16        16 2 1 2
  17        17 1 2 2
  18        18 2 1 2
  19        19 1 2 2
  20        20 2 2 2
  21        21 2 1 1
  22        22 1 2 1
  23        23 2 1 1
  24        24 2 1 2
  </code></pre>
  
  <p>But when I try it for a few it just fails utterly:</p>
  
  <pre><code>&gt; cast( ff.df, surveyNum~.id, value=c("pio","caremgmt","prev","price"))
  Error in data.frame(data[, c(variables), drop = FALSE], result = data$value) : 
    arguments imply differing number of rows: 72, 0
  In addition: Warning message:
  In names(data) == value :
    longer object length is not a multiple of shorter object length
  </code></pre>
  
  <p>Any hints?  I can use the base (stats) <code>reshape</code> command, but I'm really trying to get away from it as it causes too much manual scalp trauma from hair-pulling....</p>
  
  <pre><code>ff.df &lt;- structure(list(.id = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
  1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 
  3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
  3L, 3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
      2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), pio = structure(c(2L, 
  2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 
  2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 
  1L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 
  1L, 2L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 
  1L, 2L, 2L, 1L, 2L, 1L, 1L), .Label = c("1", "2"), class = "factor"), 
      caremgmt = structure(c(2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 
      2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 
      1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 
      1L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 
      1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 
      1L, 2L, 2L), .Label = c("1", "2"), class = "factor"), prev = structure(c(1L, 
      2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 
      1L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 
      2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 
      2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 
      1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L), .Label = c("1", 
      "2"), class = "factor"), price = structure(c(2L, 1L, 2L, 
      5L, 3L, 4L, 1L, 5L, 4L, 3L, 1L, 2L, 6L, 6L, 5L, 4L, 6L, 3L, 
      5L, 6L, 3L, 1L, 2L, 4L, 3L, 5L, 2L, 5L, 4L, 5L, 6L, 6L, 4L, 
      6L, 4L, 1L, 2L, 3L, 1L, 2L, 2L, 5L, 1L, 6L, 1L, 3L, 4L, 3L, 
      6L, 5L, 5L, 4L, 4L, 2L, 2L, 2L, 6L, 3L, 1L, 4L, 4L, 5L, 1L, 
      3L, 6L, 1L, 3L, 5L, 1L, 3L, 6L, 2L), .Label = c("1", "2", 
      "3", "4", "5", "6"), class = "factor"), surveyNum = c(1L, 
      2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 
      15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 1L, 2L, 
      3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 
      16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 1L, 2L, 3L, 
      4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 
      17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L)), .Names = c(".id", 
  "pio", "caremgmt", "prev", "price", "surveyNum"), row.names = c(NA, 
  -72L), class = "data.frame")
  </code></pre>