【问题标题】:Rename columns based on pattern R基于模式 R 重命名列
【发布时间】:2016-09-14 14:40:53
【问题描述】:

我想用函数重命名数据框中的多个列。

数据框

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", "")

不能在函数中重命名列吗?

【问题讨论】:

  • 您不需要for 循环尝试使用grepgsub("AXX", "", names(df)[grep("AXX", names(df))])
  • names(adf) &lt;- gsub('AXX', '', names(adf))
  • 你试过了吗?
  • @BertMaier 您必须将其分配给名称(df)

标签: r


【解决方案1】:

除了 akrun 等人的出色答案。 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

【讨论】:

  • 好的,然后我删除了我的答案(如果用函数包装是想要的)
猜你喜欢
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 2019-11-02
  • 2020-05-24
  • 2019-11-08
  • 2017-09-19
  • 2013-06-09
  • 2019-01-02
相关资源
最近更新 更多