2015-12-14 7 views
5

Gibt es eine clevere Möglichkeit, die Umbenennungsfunktion in dplyr zu verwenden, wenn in einigen Fällen die Spalte, die umbenannt werden soll, nicht existiert?Fehler bei der Verwendung von Umbenennen in dplyr und Spalte nicht vorhanden

Zum Beispiel würde Ich mag die folgende nicht zu einem Fehler führen

mtcars%>%rename(miles_per_gallon=mpg,missing_varible=foo) 

(Ergebnisse in dieser Fehler: Unbekannte Variablen: foo.)

, sondern die Datenrahmen mit allen möglichen Umbenennung erledigt.

Derzeit bin Überprüfung ich ausdrücklich, dass die spezifische Spalte vorhanden ist, bevor

Dank

Iain

+2

Warum möchten Sie eine Spalte umbenennen, die nicht existiert? – DatamineR

+2

Nicht alle Attribute (Spalten) existieren für alle Objekte (Zeilen), mit denen ich arbeite. Das heißt, wenn ich die Daten auf eine bestimmte Weise unterteile, kann ich mit einem Datenrahmen enden, der weniger Spalten als ich erwartet habe - daher die explizite Überprüfung – Iain

Antwort

5

Manchmal ist es in Ordnung Umbenennung nicht alles in dplyr zu tun. Dies könnte einer dieser Zeiten sein. Ich würde einen Vektor einrichten, die als Schlüssel arbeitet:

namekey <- c(mpg="miles_per_gallon", cyl="cylinders", disp="displacement", hp="horse_power", 
      drat="rear_axle_ratio", wt="weight", qsec="quarter_mile_time", vs="v_s", 
      am="transmission", gear="number_of_gears", carb="number_of_carburetors", 
      foo="missing_variable") 

mtcars1 <- mtcars[,1:2] 
mtcars1$foo <- rnorm(nrow(mtcars1)) 

names(mtcars1) <- namekey[names(mtcars1)] 

head(mtcars1) 
#     miles_per_gallon cylinders missing_variable 
# Mazda RX4      21.0   6  -0.9901081 
# Mazda RX4 Wag     21.0   6  0.2338014 
# Datsun 710     22.8   4  -0.3077473 
# Hornet 4 Drive    21.4   6  1.1200518 
# Hornet Sportabout    18.7   8  0.7482842 
# Valiant      18.1   6  0.4206614 

Sobald Sie Ihren Schlüssel haben, ist es nur eine einzige, einfach zu verstehende Codezeile, die die Umbenennungs tut.

+0

Es mag OK sein, aber es ist immer noch nett zu versuchen, alles in einem einzigen zu behalten Paradigma :) –

+0

@ Maxim.K 'dplyr' ist ein Paradigma, das Basis R enthält. Dies ist eine Basis R-Lösung, in diesem Sinne ist es immer noch in einem einzigen Paradigma. Das hängt nicht von den Add-On-Lösungen ab, die 'dplyr' ins Spiel bringt. –

2

Das plyr Paket hat eine Funktion mit einem rename()warn_missing Parametern.

plyr::rename(
    mtcars, 
    replace  = c(mpg="miles_per_gallon", foo="missing_varible"), 
    warn_missing = FALSE 
) 

Wenn Sie es verwenden, sollten requireNamespace()instead oflibrary() verwenden, so seine Funktionsnamen mit dplyr die nicht kollidieren.

Verwandte Themen