【问题标题】:rename columns containing pattern in r using plyr rename function使用 plyr 重命名函数重命名包含 r 中模式的列
【发布时间】:2013-06-09 23:45:11
【问题描述】:

我想重命名包含 r 模式的数据框中的所有列。即,我想用列名“variable”替换所有包含“variable”的列,例如“htn.variable”。我想我可以使用plyrgrepl 的重命名。我创建了一个示例:

exp<-data.frame(htn.variable = c(1,2,3), id = c(5,6,7), visit = c(1,3,4))
require(plyr)
rename ( exp, c(
names(exp)[grepl ( 'variable',names(exp))] = "variable" ))

但我收到以下错误:

错误:意外的“=”在: “ C( 名称(exp)[grepl('变量',名称(exp))] =“

我认为这与在函数中调用名称有关,我想请问是否有人可以建议如何使这项工作?谢谢。

【问题讨论】:

    标签: r rename design-patterns plyr multiple-columns


    【解决方案1】:

    为什么要打扰rename

    colnames(exp)[grepl('variable',colnames(exp))] <- 'variable'
    

    【讨论】:

    • 这个很优雅,谢谢分享。我总是对绕过 for 循环如此容易感到惊讶。
    • 不错的解决方案 +1!唯一的“竞争对手”是来自data.tablesetnames,它也适用于df
    • 非常感谢!再次感谢。
    【解决方案2】:

    如果只想替换列名中等于'variable'的部分,使用:

    colnames(exp) <- gsub('variable', 'replace string', colnames(exp))
    

    【讨论】:

      【解决方案3】:
      rename ( exp, “variable” = names(exp)[grepl ( 'variable',names(exp))])
      

      【讨论】:

      • 请添加至少一个简单的句子来解释它的作用。
      【解决方案4】:

      我不能 100% 确定这是否是您需要的,但这可能是一个开始。我远离 plyr

      for (i in 1:ncol(exp)){
          if (substr(names(exp)[i],5,12) == "variable"){
              names(exp)[i] <- "new.variable"    #or any new var name 
          }
      }
      exp
      

      您也可以只删除变量名的前四个元素。

      【讨论】:

      • 投反对票是为了什么?这不是最好的答案,但也不是“没用”。这是可行的,并且会做提交者需要的。
      • 我在这里推测,但我想一些缺陷包括(1)当矢量化选项随时可用时缺乏矢量化,(2)使用 substr 是脆弱的,因为OP 只提到了包含字符串“变量”的名称,这假设该字符串每次恰好出现在 4 个字符之后。
      • @joran 指出了主要问题。而且(对不起,如果我太细心了)你使用了太多的括号......因为 forif 里面只有一个表达式,你不需要花括号,这会使代码变慢。这可能看起来很奇怪,但特别是在简单的数学计算中(当大部分时间都花在循环上时),您可以让带有 { 的代码慢 40%。
      • 嗨 Michelle,这很有趣,我不知道花括号会减慢代码速度。无论出于清晰度和结构,我都使用它们。无论如何,这是有用的反馈。在更元的层面上:否决功能性评论(尽管显然不是最佳评论)会使 SO 成员失去帮助他人的任何动力。除非有明显错误和误导性,否则我认为不投票比不投票更合适。
      猜你喜欢
      • 2010-11-26
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2023-03-28
      相关资源
      最近更新 更多