2016-09-14 74 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