Hinzufügen einer Spalte zu einem data.frame
Habe ich die Daten.frame unten. Ich möchte eine Spalte hinzufügen, die klassifiziert werden meine Daten nach Spalte 1 (h_no
) so, dass die erste Serie von h_no 1,2,3,4 ist Klasse 1, die zweite Serie von h_no
(1 bis 7) Klasse 2 etc. wie angegeben in der letzten Spalte.
h_no h_freq h_freqsq
1 0.09091 0.008264628 1
2 0.00000 0.000000000 1
3 0.04545 0.002065702 1
4 0.00000 0.000000000 1
1 0.13636 0.018594050 2
2 0.00000 0.000000000 2
3 0.00000 0.000000000 2
4 0.04545 0.002065702 2
5 0.31818 0.101238512 2
6 0.00000 0.000000000 2
7 0.50000 0.250000000 2
1 0.13636 0.018594050 3
2 0.09091 0.008264628 3
3 0.40909 0.167354628 3
4 0.04545 0.002065702 3
InformationsquelleAutor der Frage Susanne Dreisigacker | 2012-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine Spalte hinzufügen, um Ihre Daten mit verschiedenen Techniken. Die Zitate unten stammen aus der "Details" Bereich auf der entsprechenden Hilfe-text,
[[.data.frame
.Da die Methode für
data.frame
davon ausgegangen, dass, wenn Sie nicht angeben, wenn Sie arbeiten mit Spalten oder Zeilen, wird es nehme an, du meinst die Spalten.Für dein Beispiel sollte das funktionieren:
InformationsquelleAutor der Antwort Roman Luštrik
Leicht: Ihre Daten-frame ist Ein
Dann bekommen Sie die Spalte b an.
InformationsquelleAutor der Antwort user1333396
Wenn ich verstehe die Frage richtig, Sie wollen erkennen, wenn die
h_no
nicht zu erhöhen und dann erhöht dieclass
. (Ich bin gehen zu Fuß durch, wie ich dieses problem gelöst, es ist ein self-contained-Funktion am Ende.)Arbeiten
Interessieren wir uns nur über die
h_no
Spalte für den moment, so können wir extrahieren, von den Daten-frame:Wir wollen erkennen, wenn
h_no
lautet nicht, was wir tun können durch die Zusammenarbeit aus, wenn die Differenz zwischen aufeinander folgenden Elementen ist entweder negativ oder null ist. R stellt dendiff
Funktion, die es uns ermöglicht, die den Vektor der Differenzen:Wenn man es einmal hat, ist es eine einfache Sache zu suchen, die sind nicht-positiv:
In R
TRUE
undFALSE
sind im Grunde das gleiche wie1
und0
so dass, wenn wir bekommen die kumulierte Summe dernonpos
es erhöht sich um 1, die in (fast) der entsprechenden stellen. Diecumsum
- Funktion (das ist im Grunde das Gegenteil vondiff
) können dies tun.Aber es gibt zwei Probleme: die zahlen sind zu klein; und,, uns fehlt das erste element (es sollten vier in der ersten Klasse).
Das erste problem ist einfach gelöst:
1+cumsum(nonpos)
. Und die zweite nur erfordert das hinzufügen einer1
auf der Vorderseite des Vektors, da das erste element ist immer in der Klasse1
:Nun, wir hängen ihn wieder auf unsere Daten-frame mit
cbind
(mit derclass=
syntax, die wir geben können, die Spalte derclass
überschrift):Sowie
data_w_classes
enthält nun das Ergebnis.Endergebnis
Können wir komprimieren die Linien zusammen und Verpacken Sie alles in eine Funktion zu machen, einfacher zu bedienen:
Oder, da macht es Sinn, für die
class
einen Faktor:Verwenden Sie eine Funktion wie:
(Diese Methode, dieses problem zu lösen ist gut, denn es vermeidet die explizite iteration, die in der Regel empfehlen, für R, und vermeidet eine Vielzahl von intermediären Vektoren und Listen etc. Und auch, es ist irgendwie ordentlich, wie es sein kann, auf einer Linie geschrieben 🙂 )
InformationsquelleAutor der Antwort huon
In Ergänzung zu Roman ' s Antwort, so etwas wie dies sein könnte, noch einfacher. Beachten Sie, dass ich es noch nicht getestet, weil ich keinen Zugang zu R jetzt.
Die Funktion iteriert über die Werte in
n_ho
und gibt immer die Kategorie, die den aktuellen Wert gehört zu werden. Wenn Sie einen Wert von1
erkannt wird, erhöhen wir die Globale variableindex
und weiter.InformationsquelleAutor der Antwort Paul Hiemstra
InformationsquelleAutor der Antwort user2759975