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?
Sorry! Es ist in R.
InformationsquelleAutor Marissa | 2013-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
melt
von "reshape2"In der Basis R, Sie können auch
stack
stapeln die Spalten mit der Bezeichnung 1 bis 4, undcbind
dass die erste Gruppe von Spalten. Alternativunlist
wird das auch tun.Möglicherweise möchten Sie auch einen Blick in die Daten".Tabelle" Paket zu bekommen, ein bisschen die Geschwindigkeit zu steigern.
Warning message: attributes are not identical across measure variables; they will be dropped
. Ich habe meine Ergebnisse und Sie sehen gut aus - würde aber gerne bestätigen, die den Sinn der Warnung.ok die Daten sind nicht auf der Suche in Ordnung. Ich verliere info in der resultierenden Daten.frame. statt der Kommissionierung werden alle Werte aus den Variablen, ich bin immer nur der erste Wert für jede Zeile!
diese Warnung ist in der Regel, wenn Sie Schmelzen Spalten von unterschiedlichen Typen (numeric und integer zusammen, zum Beispiel, oder Charakter und Faktor zusammen). Ich bin mir nicht sicher, wie Sie Sie interpretieren Ihre zweite Kommentar ohne einige Beispiel-Daten, mit zu arbeiten.
Ich poste es als eine Frage. Ich habe versucht, zu konvertieren alle Messen von Variablen der gleichen Klasse, aber es hat nicht funktioniert - die gleiche Warnmeldung. Post-Frage.
InformationsquelleAutor A5C1D2H2I1M1N2O1R2T1
Mit
reshape
:InformationsquelleAutor Matthew Lundberg