Il y a beaucoup de façons de le faire. Cette réponse commence par mes façons préférées, mais aussi la collecte de diverses manières à partir de réponses à des questions similaires dispersés autour de ce site.
tmp <- data.frame(x=gl(2,3, labels=letters[24:25]),
y=gl(3,1,6, labels=letters[1:3]),
z=c(1,2,3,3,3,2))
À l'aide de reshape2:
library(reshape2)
acast(tmp, x~y, value.var="z")
En utilisant la matrice d'indexation:
with(tmp, {
out <- matrix(nrow=nlevels(x), ncol=nlevels(y),
dimnames=list(levels(x), levels(y)))
out[cbind(x, y)] <- z
out
})
À l'aide de xtabs
:
xtabs(z~x+y, data=tmp)
Vous pouvez également utiliser reshape
, comme proposé ici: table de conversion dans la matrice sont les noms des colonnes, si vous avez à faire un peu de manipulation par la suite, de supprimer une des colonnes supplémentaires et d'obtenir les noms de droit (non représenté).
> reshape(tmp, idvar="x", timevar="y", direction="wide")
x z.a z.b z.c
1 x 1 2 3
4 y 3 3 2
Il y a aussi sparseMatrix
dans la Matrix
paquet, comme on le voit ici: R - convertir GRANDE table dans la matrice sont les noms des colonnes
> with(tmp, sparseMatrix(i = as.numeric(x), j=as.numeric(y), x=z,
+ dimnames=list(levels(x), levels(y))))
2 x 3 sparse Matrix of class "dgCMatrix"
a b c
x 1 2 3
y 3 3 2
L' daply
fonction de l' plyr
bibliothèque peut également être utilisé, comme ici: http://stackoverflow.com/a/7020101/210673
> library(plyr)
> daply(tmp, .(x, y), function(x) x$z)
y
x a b c
x 1 2 3
y 3 3 2
dcast
de reshape2 travaille aussi, comme ici: Remodeler les données pour les valeurs dans une colonne, mais vous obtenez un ensemble de données.cadre avec une colonne pour l' x
de la valeur.
> dcast(tmp, x~y, value.var="z")
x a b c
1 x 1 2 3
2 y 3 3 2