将列名替换为R中部分匹配的字符串

时间:2015-08-11 02:23:09

标签: r

我有一个列名为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")

3 个答案:

答案 0 :(得分:2)

使用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
 }

答案 1 :(得分:1)

数据设置:

> 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作为方法的基础

我在qwhttps://stackoverflow.com/a/31932661/338303

中定义的

.Rprofile

答案 2 :(得分:0)

如果您可以保证名称与此处相同,则非常简单。但是,这种情况是微不足道的,所以解决方案似乎没有任何价值,只有names(df) <- myobject

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