Créer une dataframe depuis deux vecteurs et une matrice

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

Piette Theophane
Messages : 16
Enregistré le : 29 Juil 2019, 07:25

Créer une dataframe depuis deux vecteurs et une matrice

Messagepar Piette Theophane » 05 Aoû 2021, 09:35

Bonjour,

J'essaye de créer une dataframe afin de créer un plot, et ce depuis deux vecteurs de taille différentes, et une matrice de taille "vecteur1*vecteur2". Je place juste en dessous une version simplifié de ce à quoi mes données ressemblent :

Code : Tout sélectionner

Freq <- c(1,2,3,4,5)
Index <- c(1,2,3,4,5,6,7,8,9,10)
Amp <- matrix (1:20, ncol=10, nrow=5 )


L'idée serait d'avoir ce genre de tableau (fait sur excel) en sachant que chaque colonne de "Amp" correspond aux valeurs d'un "Index" pour chacune des "Freq" :

Image

J'ai déja essayé de tous les combiner dans unes liste, puis de transformer cette liste en Dataframe avec le package plyr, mais le résultat n'est pas convaicant :

Code : Tout sélectionner

library (plyr)

Liste <- list (Freq,Index,Amp)
names(Liste) <- c("Freq", "Index", "Amp")
df <- ldply (Liste, data.frame)


J'ai aussi essayé la même manouevre mais en répétant "Index" et "Freq" pour qu'ils ai la bonne taille, mais cela ne marche pas non plus :

Code : Tout sélectionner

library (plyr)

FreqB <- rep(Freq, length(Index))
IndexB <- rep(Index, length(Freq))

Liste <- list (FreqB,IndexB,Amp)
names(Liste) <- c("FreqB", "IndexB", "Amp")
df <- ldply (Liste, data.frame)


Pour l'instant j'arrive a créer la premiere partie du tableau en repetant "Index" et "Freq", puis en triant "Index" et en mettant "IndexB" et "FreqB" dans le même tableau, mais je n'arrive pas à leur associer les valeurs de chaque colonne de "Amp".

Code : Tout sélectionner

FreqB <- rep(Freq, length(Index))
IndexB <- rep(Index, length(Freq))
IndexB <- sort(IndexB)
test <- cbind (IndexB, FreqB)


Je vous remercie d'avance pour l'aide :).

Fred Santos
Messages : 235
Enregistré le : 11 Avr 2009, 10:00
Contact :

Re: Créer une dataframe depuis deux vecteurs et une matrice

Messagepar Fred Santos » 05 Aoû 2021, 09:56

Bonjour,

Il faudrait être sûr de savoir dans quel ordre sont données les valeurs de la matrice Amp. (Par exemple, je ne suis pas sûr de savoir pourquoi la valeur de la colonne Amp recommence à 1 à la ligne 11 de votre capture d'écran : ça ne devrait pas plutôt être 11, et reboucler sur 1 seulement après la 20e valeur ?)

C'est réellement ce point qui conditionne tout, car une fois qu'on est sûr de ça, on peut adopter une solution très simple du genre :

Code : Tout sélectionner

index <- rep(Index, each = length(Freq))
freq <- rep(Freq, times = length(Index))
data.frame(Index = index, Freq = freq, Amp = as.vector(Amp))

(à adapter !)

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

Re: Créer une dataframe depuis deux vecteurs et une matrice

Messagepar Logez Maxime » 06 Aoû 2021, 08:27

Bonjour,

une autre possibilité avec expand.grid :

Code : Tout sélectionner

tab <- expand.grid(Freq = Freq, Index= Index)[,2:1]
tab$Amp <- c(Amp)
Cordialement,
Maxime

Piette Theophane
Messages : 16
Enregistré le : 29 Juil 2019, 07:25

Re: Créer une dataframe depuis deux vecteurs et une matrice

Messagepar Piette Theophane » 09 Aoû 2021, 09:11

La solution de Maxime marche super bien.

Merci beaucoup :D


Retourner vers « Questions en cours »

Qui est en ligne

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