Benennen Sie eine benannte Spalte in R
Ich möchte aktualisieren eine Spalte mit einem dataframe, auf Sie verweisen mit Ihrem ursprünglichen Namen, ist das möglich? Zum Beispiel sagen, ich hatte die Tabelle 'Daten'
a b c
1 2 2
3 2 3
4 1 2
und ich wollte zu aktualisieren Sie den Namen der Spalte b 'd'. Ich weiß, ich könnte
colnames(data)[2] <- 'd'
aber ich kann die änderung vornehmen, indem ein direkter Bezug auf b, d.h. so etwas wie
colnames(data)['b'] <- 'd'
so, dass wenn in der Spalte Reihenfolge der dataframe änderungen die richtige Spalte name wird immer noch aktualisiert werden.
Vielen Dank im Voraus
InformationsquelleAutor der Frage user1165199 | 2012-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oktober 2014 dieses kann nun einfach durchgeführt werden, in der dplyr Paket:
InformationsquelleAutor der Antwort Sam Firke
Gibt es eine Funktion
setnames
integriert-Paket- Daten.table
für genau das.Ändert er die Namen, die durch Verweis ohne kopieren. Eine andere Methode, mit
names(data)<-
odernames(data)[i]<-
oder ähnliches kopieren Sie die gesamte Objekt, in der Regel mehrmals. Auch wenn alles, was Sie tun, ändert den Namen einer Spalte aus.DT
werden muss, geben Siedata.table
fürsetnames
zu arbeiten, obwohl. Damit würdest du wechseln zu müssendata.table
oder konvertieren mitas.data.table
zu verwenden.Hier ist der Auszug aus
?setnames
. Die Absicht ist, dass Sie laufenexample(setnames)
an der Eingabeaufforderung und dann die Kommentare beziehen sich auf die Kopien, die Sie sehen, wird berichtettracemem
.InformationsquelleAutor der Antwort Matt Dowle
Scheint dies wie ein hack, aber das erste, was mir in den Sinn kam, war der Einsatz von
grepl()
mit einem ausreichend detailliert genug, Suchbegriff, um nur die Spalte, die Sie möchten. Ich bin sicher, es gibt bessere Möglichkeiten:Als Joran Punkte unten, dass ich zu kompliziert...keine Notwendigkeit für eine regex überhaupt. Das spart ein paar Zeichen auf der Eingabe zu.
InformationsquelleAutor der Antwort Chase
Ja, aber es ist schwieriger (soweit ich weiß) als numerischer Indizierung. Ich bin gehen, um eine schmutzige Funktion, die dies tun, und wenn Sie wollen, um zu sehen, wie es zu tun, nur reißen die Funktion auseinander Zeile:
InformationsquelleAutor der Antwort Tyler Rinker
Stimme ich mit @Chase - die
grepl
Lösung ist nicht die glücklichste. Ich würde sagen: gehen Sie mit einfachen==
. Ist hier, warum:Nun versuchen Sie
grepl("b", colnames(d))
. Entweder gehtfixed = TRUE
oder noch besser einfachcolnames(d) == "b"
wie @joran vorgeschlagen. Regex-matching immer langsamer als==
also für einfache Aufgaben wie das Sie verwenden möchten, können einfach==
.InformationsquelleAutor der Antwort aL3xa