JC,

Minha solução não retorna exatamente o que você quer, mas aproxima bem, veja

df <- data.frame(gl(n=5, k=6, lab=LETTERS[1:5]), rep(1:6, 5), 1:30)
names(df) <- c('tra', 'r', 'y')
str(df)

require(reshape)
cast(df, r~tra, value="y")
> cast(df, r~tra, value="y")
  r A  B  C  D  E
1 1 1  7 13 19 25
2 2 2  8 14 20 26
3 3 3  9 15 21 27
4 4 4 10 16 22 28
5 5 5 11 17 23 29
6 6 6 12 18 24 30

À disposição.
Walmes.

==========================================================================
Walmes Marques Zeviani
LEG (Laboratório de Estatística e Geoinformação, 25.450418 S, 49.231759 W)
Departamento de Estatística - Universidade Federal do Paraná
fone: (+55) 41 3361 3573
VoIP: (3361 3600) 1053 1173
e-mail: walmes@ufpr.br
twitter: @walmeszeviani
homepage: http://www.leg.ufpr.br/~walmes
linux user number: 531218
==========================================================================