So konvertieren Sie mehrere Spalten, um einzelne Zeilen in R

Habe ich einen Daten-frame in R, die viele Zeilen (über 3000) mit F0 (Grundfrequenz) Spuren einer äußerung. Die Zeilen haben den folgenden Informationen: - Lautsprecher-ID, group # Wiederholung #, accent Typ, sex, und dann 50 Spalten von F0 Punkte. Die Daten sieht wie folgt aus:

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 

Aber statt nur X4, es hat 50 Punkte pro Zeile, also ich habe ein 3562x56-Daten-frame. Ich will es ändern, so dass jede Spalte der Daten in der F0-track (also nach dem Wort,, ab 1:50) bekommt seine eigene Spalte mit den dazugehörigen Spalte Anzahl als einer anderen Zeile. Ich möchte Sie halten alle Informationen, die in den ersten sechs Spalten mit den einzelnen Daten Punkt als gut, so würde es so Aussehen:

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 
    ...

Den code habe ich versucht zu verwenden, während Sie mühsam, ist wie folgt:

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    
    }
}

Jedoch, wenn ich das mit norm.alle als ein NULL-Objekt (nur definiert durch die norm.alle = c() ), habe ich am Ende eine Liste von über 200 Gegenstände, von denen viele NAs. Wenn ich definieren norm.alle als Daten-frame (entweder eine leere oder eine, die alles 0s, in der 178100x8 Daten-frame, bekomme ich eine Fehlermeldung:

Fehler in $<-.data.frame(*tmp*, "Lautsprecher", value = 105L) : der Ersatz hat 1 Zeile, Daten 0

Ist mein code einfach Total aus? Gibt es einen anderen Weg, dies zu tun?

welche Sprache soll das sein? C?
Sorry! Es ist in R.

InformationsquelleAutor Marissa | 2013-12-09

Schreibe einen Kommentar