【问题标题】:Replace column names with the string that partially match in R用 R 中部分匹配的字符串替换列名
【发布时间】:2015-11-03 02:42:52
【问题描述】:

我有一个列名为 mycolumns 的数据框(有超过 2000 列)。我有一个名为myobject 的对象,其中包含与mycolumns 中的列名部分匹配的字符串集(每个都与一个列名匹配)。我想用我的对象中的相应字符串替换列名。所以数据框的新列名将是"jackal","cat.11","Rat.Fox"。请注意,这必须通过使用模式匹配或正则表达式来完成,因为在 myobject 中匹配名称的顺序可能不同。

mycolumns <- c("jackal.fox11.FAD", "cat.11.miss.DAD", "Rat.Fox.11.33.DDG")
myobject  <- c("jackal","Rat.Fox","cat.11")

【问题讨论】:

  • 除非您尝试通过正则表达式进行匹配,否则您在问题中没有提及。 names(&lt;data.frame&gt;) &lt;- myobject
  • 是的,必须是模式匹配,因为顺序可能不同。
  • 您没有在问题中描述这一点。请修改
  • 我刚做了。谢谢!

标签: r


【解决方案1】:

使用 grep 的 for 循环怎么样:

 #your example
 mycolumns <- c("jackal.fox11.FAD", "cat.11.miss.DAD", "Rat.Fox.11.33.DDG")
 myobject  <- c("jackal","Rat.Fox","cat.11")

 #for loop solution
 for(i in myobject){
      mycolumns[grepl(i, mycolumns)] <- i
 }

【讨论】:

    【解决方案2】:

    数据设置:

    > mycols = qw("jackal.fox11.FAD cat.11.miss.DAD Rat.Fox.11.33.DDG")
    > df = read.csv(textConnection("1,2,3"), header=F)
    > names(df) = qw("jackal Rat.Fox cat.11")
    

    企业:

    > names(df) = sapply(names(df), function(n) mycols[grepl(n, mycols)])
    

    结果:

    > names(df)
    [1] "jackal.fox11.FAD"  "Rat.Fox.11.33.DDG" "cat.11.miss.DAD"
    

    向@luke-singham 推荐方法的基础

    qw 定义在我的.Rprofile 中,就像在https://stackoverflow.com/a/31932661/338303 中一样

    【讨论】:

    • 您所做的与我需要的完全相反,但它确实有效。谢谢!
    【解决方案3】:

    如果你能保证名字和这里的一样,那就很简单了。然而,这种情况是微不足道的,所以解决方案似乎没有任何价值,而不仅仅是names(df) &lt;- myobject

    names(df)[c(grep(myobject[1], mycolumns), grep(myobject[2], mycolumns), grep(myobject[3], mycolumns))] <- myobject
    

    【讨论】:

    • 这对我不起作用,因为数据框有超过 2000 列。
    • @MAPK 如果您没有提供一个完整的示例来说明您正在尝试做什么,那么您就不能期望得到一个合适的解决方案。我在回答中指出,解决方案是微不足道的。您的问题没有描述您的实际问题。
    猜你喜欢
    • 2016-09-14
    • 2023-02-16
    • 2022-01-07
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多