Umbenennen von Spalten in mehrere dataframes, R
Ich versuche zu Spalten umbenennen von mehreren data.frame
s.
Um ein Beispiel zu geben, sagen wir, ich habe eine Liste von data.frame
s dfA
, dfB
und dfC
. Ich schrieb eine Funktion changeNames
Namen entsprechend und dann lapply
wie folgt:
dfs <- list(dfA, dfB, dfC)
ChangeNames <- function(x) {
names(x) <- c("A", "B", "C" )
}
lapply(dfs, ChangeNames)
Aber dies funktioniert nicht wie erwartet. Es scheint, dass ich nicht die Zuordnung der neuen Namen für die data.frame
, sondern nur die Erstellung der neuen Namen. Was mache ich hier falsch?
Vielen Dank im Voraus!
- Nach der Zeile
names(x) <-
in Ihrer Funktion, fügen Siereturn(x)
oder einfachx
. Andere, die Sie zurückgeben, nurnames(x)
. - Danke für deine Antwort Arun! Wenn ich ad-return(x), bekomme ich eine outprint dfA, dfB und dfC, mit dem neuen Namen. Aber wenn ich die Namen(dfA), Namen(dfB) und Namen(dfC) danach, Sie immer noch die alten Spaltennamen. Meine Daten-frames sind auch sehr große, also ich bin nicht daran interessiert, Sie anzusehen. Nur verändert es die Spalte Namen.
lapply
ändert sich nicht der Eingang. Es gibt keinen "change by reference" geschieht hier. Es wird alles getan, auf eine Kopie. Sie werden zuordnen müssen, um das Ergebnis zurück. tun:dfs <- lapply(dfs, ChangeNames)
- Ok, die dfs ist jetzt eine große Liste mit dfA, dfB und dfC, mit der neuen columnnames. Ich bin immer noch interessiert an einer Zusammenarbeit mit der dfA, dfb eine dfC individuell, und individuell Sie haben immer noch die alten columnnames? Wie ordne ich das Ergebnis zurück auf die einzelnen dataframes?
- gut, Sie weisen Sie zurück.
dfA <- dfs[[1]]
... ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es hier zwei Dinge:
1) sollten Sie wieder den Wert, den Sie möchten, aus Ihrer Funktion. Sonst, wird der Letzte Wert zurückgegeben. In deinem Fall ist
names(x)
. Stattdessen sollten Sie hinzufügen, wie die Letzte Zeile,return(x)
oder einfachx
. Also, Ihre Funktion würde wie folgt Aussehen:2)
lapply
nicht ändern Sie Ihre Eingabe, Objekte by reference. Es arbeitet auf einer Kopie. So haben Sie zum zuweisen der Ergebnisse zurück. Oder eine andere alternative ist die Verwendungfor-loops
stattlapply
:Sogar mit der
for-loop
haben, werden Sie noch eine Kopie, danames(.) <- .
tut). Sie können dies überprüfen, mithilfetracemem
.Wenn Sie ändern möchten, indem Sie die Referenz, die Sie verwenden können
data.table
Paket istsetnames
Funktion:Sehen Sie, dass der Speicher
df
zugeordnet ist, nicht geändert hat. Die Namen wurden geändert-by-reference.grep()
ändern Sie den Namen von bestimmten Spalten in alle meine Daten-frames.Wenn die dataframes waren nicht in der Liste sondern nur in der globalen Umwelt, Sie könnten finden Sie mit einem Vektor von string-Namen.
BEARBEITEN
Zur Vereinfachung der obige code, den Sie verwenden konnten
oder mit
data.table
das keine zugewiesen wird.Hatte ich das problem das importieren eines öffentlichen Datensatzes und umbenennen müssen jeder dataframe und benennen Sie jede Spalte in jeder dataframe zu trimmen Leerzeichen, Kleinbuchstaben, und ersetzen Sie die internen Bereiche mit Perioden.
Kombination der oben genannten Methoden habe ich: