Intercaler des lignes dans un tableau

Aller en bas

Intercaler des lignes dans un tableau Empty Intercaler des lignes dans un tableau

Message par Proxima le Mar 9 Juil 2013 - 9:27

Bonjour,

J'ai un data.frame de 1054 ligne et 8 variables.
Je cherche le moyen d'intercaler une ligne entre chaque ligne du tableau et ensuite basculer les informations des 4 dernières colonnes dans les lignes vides créées.

Ex:

id      V1     V2    V3     V4     V1'     V2'      V3'     V4'    
1      32     35     28     98     0.5     0.9      0.4     0.6
2      26     45     68     59     0.3     0.4      0.5     0.2

Pour obtenir

1      32     35         28     98
1      0.5     0.9      0.4     0.6
2      26     45         68     59
2      0.3     0.4      0.5     0.2

Est-ce que quelqu'un peut me renseigner sur les étapes à suivre ?

Merci d'avance !

Proxima

Nombre de messages : 10
Date d'inscription : 05/07/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Nik le Mar 9 Juil 2013 - 10:09

Bonjour,

est-ce vraiment indispensable que les valeurs V1'-V4' soient physiquement juste en dessous de celles de V1à V4 ?

dans le cas contraire il suffit de faire :
Code:
n <- nrow(data)
data <- rbind(data[,1:4],data[,5:8])
#pour conserver une trace de qui vient d'où :)
id <- rep(1:n,2)

Nik

Nombre de messages : 1605
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Proxima le Mar 9 Juil 2013 - 12:33

Bonjour,

Oui, cela est indispensable pour la suite. Mais du coup, je n'ai pas envie de le faire manuellement, risquant de faire des erreurs...et ce cas de figure risquant de se représenter, j'aimerais faire quelque chose de correct !!

Merci tout de même pour votre réponse !

Proxima

Nombre de messages : 10
Date d'inscription : 05/07/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Nik le Mar 9 Juil 2013 - 12:38

Donc, première étape :
Code:
n <- nrow(data)
data <- rbind(data[,1:4],data[,5:8])
#pour conserver une trace de qui vient d'où :)
id <- rep(1:n,2)

données dans l'ordre :
Code:
data<- data.frame(id=id,data)[order(id),]

Nik

Nombre de messages : 1605
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Proxima le Mar 9 Juil 2013 - 13:27

Super, merci, un grand pas est fait ! J'obtiens donc :

id ID V1 V2 V3 V4 V1.1 V2.1 V3.1 V4.1
1  1  1 32 35 28 98  0.5  0.9  0.4  0.6
3  1  1 32 35 28 98  0.5  0.9  0.4  0.6
2  2  2 26 45 68 59  0.3  0.4  0.5  0.2
4  2  2 26 45 68 59  0.3  0.4  0.5  0.2

Maintenant, le tout est de faire passer les V1.1, V2.1...sous les V1, V2. Et là, je bloque encore...(et résiste à la tentation de faire tout à la main Smile

Proxima

Nombre de messages : 10
Date d'inscription : 05/07/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Nik le Mar 9 Juil 2013 - 13:35

??
tu ne dois pas obtenir ça.
Chez moi j'obtiens un tableau à 5 colonnes (id étant la première) et j'ai bien les valeurs des colonnes 5 à 8 initiales sous celles des 1 à 4, et ce pour chaque ligne du tableau initial.


Nik

Nombre de messages : 1605
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Proxima le Mar 9 Juil 2013 - 14:02

Alors du coup, sur cette commande

data <- rbind(data[,2:5],data[,6:9])

j'obtiens en fait un message d'erreur (que je pensais avoir évacuer en nommant les variables des 4 dernières colonnes de la même manière que les 4 premières colonnes, d'où le V1.1). Mais que je les renomme ou pas, c'est toujours le même message :

Erreur dans match.names(clabs, names(xi)) :
 les noms ne correspondent pas aux noms précédents


J'ai recodé l'ID en facteur, le message est toujours le même.
En PJ, le jeu de données que j'utilise pour l'exemple.

Merci du temps que vous m'accordez !

Proxima

Nombre de messages : 10
Date d'inscription : 05/07/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Nik le Mar 9 Juil 2013 - 14:23

non rien à voir avec id. C'est le format de l'objet qui bloque :

fais :
Code:
data <- as.matrix(data)
ça ne change rien si tu n'as bien que des valeurs numériques dans ton tableau. Si tu as des facteurs alors ça risque de poser problèmes.

Nik

Nombre de messages : 1605
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par droopy le Mar 9 Juil 2013 - 14:33

ce n'est pas le format qui bloque mais le nom des colonnes qui ne sont pas les memes. rbind vérifie le nom des colonnes et s'ils sont différents la liaison ne se fait pas il te faut les harmoniser avant.
cdlt
droopy
droopy

Nombre de messages : 1126
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Nik le Mar 9 Juil 2013 - 14:36

effectivement, dans mon test j'ai construit une matrice sans nom de colonne du coup pas de pb Smile

Nik

Nombre de messages : 1605
Date d'inscription : 23/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Proxima le Mar 9 Juil 2013 - 14:46

Et bien merci beaucoup Nik!

Il me semblait bien que cbind fonctionnait chez les matrices , mais à l'appel de l'aide (?cbind) j'ai lu "Take a sequence of vector, matrix or data frames arguments and combine by columns or rows, respectively" trop vite puisque juste en dessous l'argument matriciel est précisé. Ah les gens pressés...

R accepte la transformation du data.frame dès qu'il est passé en matrice, sans uniformiser les noms de variables à "binder". Dans ce cas, pas de message d'erreur.

Tout fonctionne en tout cas, c'est formidable, merci cheers  !
Bonne fin de journée !

Proxima

Nombre de messages : 10
Date d'inscription : 05/07/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Intercaler des lignes dans un tableau Empty Re: Intercaler des lignes dans un tableau

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum