根据模式R重命名列

时间:2016-09-14 14:40:54

标签: 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", "")

是否无法在函数中重命名列?

1 个答案:

答案 0 :(得分: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