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?

quelle langue est-ce censé être? C?
Désolé à ce sujet! C'est dans R.

OriginalL'auteur Marissa | 2013-12-09