R-通过字符选择并重命名列

时间:2020-04-06 17:06:39

标签: r select rename

我得到了一个带有大量变量的大型数据框,我想选择并重命名其中的一些变量。我想通过选择字符来反复选择它们。考虑一下,我有数百个变量,因此通过索引调用它们将是一场大屠杀。有什么解决方案可以优雅地做到这一点吗?

例如,我得到了以下列名称:

 [1] "Compound.Name"  "owl.7.aa"       "owl.8.aa"       "owl.onco.72.aa" "owl.9.aa"       "owl.10.aa"     
 [7] "owl.11.aa"      "owl.12.aa"      "owl.13.aa"      "owl.7.3.aa"     "owl.8.3.aa"     "esp.8.bag"     
[13] "esp.7.bag"      "esp.72.bag"     "esp.9.bag"      "esp.10.bag"     "esp.11.bag"     "esp.12.bag"    
[19] "esp.13.bag"     "esp.7.3.bag"    "esp.8.3.bag"

我想用字符“ 7”有选择地选择“ owl.7.aa”和“ esp.7.bag”,并用新名称(例如“ seven”或“ 7”)替换它们。然后,我想使用“ owl.8.aa”和“ esp.8.bag”将它们替换为“八个”来进行相同的工作,依此类推。

换句话说,我想通过实验的识别号(7、8、72、9等)来对实验进行配对。

有什么建议吗?

提前谢谢

1 个答案:

答案 0 :(得分:0)

我们可以使用english

library(english)
library(gsubfn)
gsubfn("(\\d+)", ~ as.character(english(as.numeric(x))), names(df1))

或者可能是

gsubfn("[A-Za-z]+[^0-9]+(\\d+)\\..*", ~ as.character(english(as.numeric(x))),
               names(df1)
#[1] "Compound.Name" "seven"         "eight"         "seventy-two"   "nine"          "ten"          
#[7] "eleven"        "twelve"        "thirteen"      "seven"         "eight"         "eight"        
#[13] "seven"         "seventy-two"   "nine"          "ten"           "eleven"        "twelve"       
#[19] "thirteen"      "seven"         "eight"     

数据

names(df1)
c("Compound.Name", "owl.7.aa", "owl.8.aa", "owl.onco.72.aa", 
"owl.9.aa", "owl.10.aa", "owl.11.aa", "owl.12.aa", "owl.13.aa", 
"owl.7.3.aa", "owl.8.3.aa", "esp.8.bag", "esp.7.bag", "esp.72.bag", 
"esp.9.bag", "esp.10.bag", "esp.11.bag", "esp.12.bag", "esp.13.bag", 
"esp.7.3.bag", "esp.8.3.bag")