Dies ist mit Base R oder setnames
in data.table
oder rename_
in dplyr
0.5 einfach. Da rename_
veraltet ist, konnte ich keinen einfachen Weg finden, dies in dplyr
0.6.0 zu tun.Benennen Sie mehrere Spalten mit Zeichenvektoren für Spaltennamen und Ersetzen um.
Unten ist ein Beispiel. Ich möchte Spaltennamen in col.from
mit entsprechenden Werten in col.to
ersetzen:
col.from <- c("wt", "hp", "vs")
col.to <- c("foo", "bar", "baz")
df <- mtcars
head(df, 2)
#> mpg cyl disp hp drat wt qsec vs am gear carb
#> Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
Erwartete Ausgabe:
names(df)[match(col.from, names(df))] <- col.to
head(df, 2)
#> mpg cyl disp bar drat foo qsec baz am gear carb
#> Mazda RX4 21 6 160 110 3.9 2.620 16.46 0 1 4 4
#> Mazda RX4 Wag 21 6 160 110 3.9 2.875 17.02 0 1 4 4
Wie kann ich das mit rename
oder rename_at
in dplyr
0.6.0?
Oder etwas kürzer 'df%>% rename_at (vars (col.from), ~ col.to) ' –
Wow, beide sind sehr einfach in der Syntax. Die einzige Sache ist, dass es für mich schwierig ist, das Verhalten von "rename_at" in einem solchen Fall aufzuheben. Ich dachte, die '.funs' würden auf jeden Spaltennamen in' .vars' angewendet. Ich habe nicht erwartet, dass es nach Position passt. – mt1022
@ mt1022 Ja, der von @docendodiscimus würde ein gutes Beispiel im '? Select_all' Dokument machen. Die Funktion wird auf alle ausgewählten Spaltennamen angewendet. Das heißt, 'function (x)' erhält grundsätzlich die 'col.from' Werte in' x', dann kann es damit umgehen - was in unserem Fall nur einen anderen Zeichenvektor der Länge 3 zurückgibt. – lukeA