Comment faire pour convertir plusieurs colonnes pour chaque ligne dans la R
J'ai un bloc de données dans R qui a de nombreuses lignes (plus de 3000) avec F0 (fréquence fondamentale) pistes d'un énoncé. Les lignes contiennent les informations suivantes: haut-parleur, l'ID du groupe de la répétition, de l' #, à l'accent de type, le sexe, puis 50 colonnes de F0 points. Les données ressemble à ceci:
Speaker Sex Group Repetition Accent Word 1 2 3 4
105 M 1 1 N AILMENT 102.31030 102.31030 102.31030 102.31127
105 M 1 1 N COLLEGE 111.80641 111.80313 111.68612 111.36020
105 M 1 1 N FATHER 124.06655 124.06655 124.06655 124.06655
Mais au lieu de seulement X4, il dispose de 50 points par ligne, j'ai donc un 3562x56 bloc de données. Je veux le changer pour chaque colonne de données dans la F0 de la piste (donc après mot, à partir de 1:50) obtient sa propre colonne, avec le numéro de colonne comme une autre ligne. Je veux garder toutes les informations dans les six premières colonnes avec chaque point de données, ainsi il devrait ressembler à ceci:
Speaker Sex Group Repetition Accent Word Num F0
105 M 1 1 N AILMENT 1 102.31030
105 M 1 1 N AILMENT 2 102.31030
105 M 1 1 N AILMENT 3 102.31030
105 M 1 1 N AILMENT 4 102.31127
...
105 M 1 1 N COLLEGE 1 111.80641
105 M 1 1 N COLLEGE 1 111.80313
105 M 1 1 N COLLEGE 1 111.68612
105 M 1 1 N COLLEGE 1 111.36020
...
Le code que j'ai essayé de l'utiliser, bien que fastidieux, est comme suit:
x = 1
for (i in 1:dim(normrangef0)[1]) {
for (j in 1:50) {
norm.all$Speaker[x] <- normrangef0$Speaker[i]
norm.all$Sex[x] <- normrangef0$Sex[i]
norm.all$Group[x] <- normrangef0$Group[i]
norm.all$Repetition[x] <- normrangef0$Repetition[i]
norm.all$Word[x] <- normrangef0$Word[i]
norm.all$Accent[x] <- normrangef0$Accent[i]
norm.all$Time[x] <- j
norm.all$F0[x] <- normrangef0[i,j+6]
x = x+1
}
}
Cependant, quand je fais cette norme.tout comme un objet NUL (défini par la norme.tous les = c() ), je me retrouve avec une liste de plus de 200 articles, dont beaucoup sont des NAs. Quand j'définir la norme.tout comme un bloc de données (soit un vide ou de l'une des 0, dans le 178100x8 trame de données, j'obtiens une erreur:
Erreur dans
$<-.data.frame
(*tmp*
, "haut-Parleur", valeur = 105L) : remplacement de 1 ligne, des données a 0
Est mon code juste complètement à côté? Est-il une autre façon de le faire?
Désolé à ce sujet! C'est dans R.
OriginalL'auteur Marissa | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Utilisation
melt
de "reshape2"Dans la base de R, vous pouvez également utiliser
stack
d'empiler les colonnes numérotées de 1 à 4, etcbind
qu'avec le premier groupe de colonnes. Sinon,unlist
vais aussi le faire.Vous pouvez également regarder dans le "des données.tableau" paquet pour obtenir un peu d'un boost de vitesse.
Warning message: attributes are not identical across measure variables; they will be dropped
. J'ai vérifié mes résultats et ils ont l'air très bien - mais tiens à confirmer le sens de l'avertissement.ok les données n'est pas en regardant bien. Je suis de perdre de l'info dans les données qui en résultent.cadre. au lieu de ramasser toutes les valeurs de la variable, je reçois uniquement la première valeur pour chaque ligne!
cet avertissement est généralement lorsque vous êtes en fonte colonnes de types différents (numérique et entier ensemble, par exemple, ou de caractère et factor). Je ne suis pas sûr de savoir comment interpréter votre deuxième commentaire, sans un exemple de données pour travailler avec.
Je vais poster une question. J'ai essayé de convertir toutes les variables de mesure de la même classe, mais il n'a pas de travail même message d'avertissement. Afficherons question.
OriginalL'auteur A5C1D2H2I1M1N2O1R2T1
Avec
reshape
:OriginalL'auteur Matthew Lundberg