Encore un pb de manipulation de tableau

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Luis Tito de Morais
Messages : 2
Enregistré le : 02 Déc 2008, 14:35

Encore un pb de manipulation de tableau

Messagepar Luis Tito de Morais » 02 Déc 2008, 15:32

Bonjour,

J'ai fouillé dans les forums et j'ai cherché à utiliser les fonctions reshape, stack, xtabs et sparseby pour résoudre mon problème mais je n'y suis pas parvenu. Je dois avoir raté quelquechose quelque part ...
:(


Peut-être quelqu'un peut-il m'aider.

Je dispose d'un tableau dont je donne les 2 premières lignes :
> head(ac,2)
CPROF CTRANS CSALS CTEMPS COXYS CFCOUR logSaBrut logBiomBrut
1 D B B B A A -1.8971200 8.559103
2 C C C D B A -0.5108256 10.387764

Il a pour dimmensions :
> dim(ac)
[1] 153 8

Je voudrais "empiler" mon tableau pour obtenir un tableau de 918 lignes (6x153) et 4 colonnes.

Je donne ici la commande pour créer un data frame d'exemple court avec les mêmes colonnes et seulement les deux premières lignes du fichier :

X <- data.frame(CPROF=c('D','C'), CTRANS=c('B','C'), CSALS=c('B','C'), CTEMPS=c('B','D'), COXYS=c('A','B'), CFCOUR=c('A','A'), logSaBrut=c(-1.8971200,-0.5108256), logBiomBrut=c(8.559103,10.387764))

comment passer de X :
> dim(X)
[1] 2 8
à un dataframe de 12 (6x2) lignes et 4 colonnes :

Classe Variable logSaBrut logBiomBrut
1 D CPROF -1.8971200 8.559103
2 C CPROF -0.5108256 10.387764
3 B CTRANS -1.8971200 8.559103
4 C CTRANS -0.5108256 10.387764
5 B CSALS -1.8971200 8.559103
6 C CSALS -0.5108256 10.387764
7 B CTEMPS -1.8971200 8.559103
8 D CTEMPS -0.5108256 10.387764
9 A COXYS -1.8971200 8.559103
10 B COXYS -0.5108256 10.387764
11 A CFCOUR -1.8971200 8.559103
12 A CFCOUR -0.5108256 10.387764

Merci beaucoup pour toute aide.

LT

Luis Tito de Morais
Messages : 2
Enregistré le : 02 Déc 2008, 14:35

Encore un pb de manipulation de tableau

Messagepar Luis Tito de Morais » 02 Déc 2008, 15:54

Bonjour,

Je crois avoir trouvé tout seul la solution.

Je la poste ici :

melt.data.frame(X, id.var=c("logSaBrut","logBiomBrut"), variable_name = "Variable")

Merci à tous ceux qui y auront passé du temps !

LT

Précision : melt se trouve dans le paquetage "reshape"
library(reshape)

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 02 Déc 2008, 15:58

Bonjour,

Bon je n'ai rien trouvé de très direct :

Code : Tout sélectionner

aux <- unlist(X[,1:6])
Y <- data.frame(aux,gsub("[0-9]+$","",names(aux)),row.names=NULL)
colnames(Y) <- c("Classe","Variable")
Z <- cbind(Y,X[rep(1:nrow(X),6),7:8])

## ou
W <- cbind(ind=1:nrow(X),X)
W2 <- reshape(W,idvar="ind",varying=list(2:7),direction="long")
W2$Variable <- colnames(W[,2:7])[W2$time]
W2 <- W2[,c(5:6,2:3)]
colnames(W2)[1] <- c("Classe")


Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité