我有一个列名为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")
答案 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作为方法的基础
我在qw
和https://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