2016-09-14 5 views
0

Ich möchte mehrere Spalten in einem Datenrahmen mit einer Funktion umbenennen.Spalten umbenennen basierend auf Muster R

Datenrahmen

nameAXX = c("car1", "car2", "car2", "car2", "car3", "car1") 
brand = c("b1", "b2", "b2", "b2", "b3", "b1") 
productionAXX = c(10, 10, 10, 40, 10, 5) 
df = data.frame(brand, nameAXX, productionAXX) 

Die Schleife selbst funktioniert, aber es nicht, wenn ich es in einer Funktion wickeln anzurufen.

replaceColNamePattern <- function(df, pattern, replace){ 
    for (name in colnames(df)){ 
    if (regexpr(pattern, name) > 0){ 
     names(df)[names(df)==name] <- gsub(pattern, replace, name) 
    } 
    } 
} 

Anruffunktion

replaceColNamePattern(adf, "AXX", "") 

Ist es nicht möglich, die Spalte in einer Funktion zu umbenennen?

+0

Sie haben nicht eine 'for' Schleife für das Versuchen mit' grep' dh 'gsub („AXX“,„“müssen, Namen (df) [grep ("AXX", Namen (df))]) ' – akrun

+3

' Namen (adf) <- gsub ('AXX', '', Namen (adf)) ' – Jaap

+0

hast du es versucht? – Jaap

Antwort

1

Neben den ausgezeichneten Antworten von akrun et. Alii, der Grund, warum Ihr Code nicht wie vorgesehen funktioniert, ist, weil Sie den Namen df im Rahmen der Funktion ändern (und nur dort). Sie würden df zurückkommen müssen, und weisen Sie auf die ursprüngliche Variable zurück:

replaceColNamePattern2 <- function(df, pattern, replace){ 
    names(df) <- gsub(pattern, replace, names(df)) 
    df 
} 

(df <- replaceColNamePattern2(df, "AXX", "")) 
# brand name production 
# 1 b1 car1   10 
# 2 b2 car2   10 
# 3 b2 car2   10 
# 4 b2 car2   40 
# 5 b3 car3   10 
# 6 b1 car1   5 
+0

Okay, dann löschte ich meine Antwort (wenn das Wrapping mit Funktion ist, was beabsichtigt ist) – akrun

Verwandte Themen