2016-09-14 82 views
0

我想用函數重命名數據框中的多個列。根據模式R重命名列

數據幀

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) 

循環本身的工作但如果我把它包在一個函數並調用它。

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

呼叫功能

replaceColNamePattern(adf, "AXX", "") 

是沒可能的函數中重命名列?

+0

你並不需要這樣的'for'循環用'grep'即'GSUB(「AXX」嘗試「」名(df)[grep(「AXX」,names(df))])' – akrun

+3

'name(adf)< - gsub('AXX','',names(adf))' – Jaap

+0

你試過了嗎? – Jaap

回答

1

除了akrun et。 alii,你的代碼不能按預期工作的原因是因爲你在函數範圍內(並且僅在那裏)改變了df的名字。你會需要返回df並將其分配回原來的變量:

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

好吧,然後我刪除了我的答案(如果使用函數打包是打算的) – akrun