如何解决.checkTypos(e,names_x)中的错误,在R中使用gsub函数时收到错误

eqfvzcg8  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(171)

在我的数据中,列名的书写方式如下

D/T  Temp [degCelc]  Pres [hPa]  SRad [W/m**2]  Rain [mm]  ARad [W/m**2]  Moist [%]  K [%]  Temp1  Press1

字符串
我想将列名更改为

D/T  Temp  Pres  SRad  Rain  ARad  Moist  K  Temp1  Press1

correct_column_names <- function(dt_list){
  lapply(dt_list, FUN = function(x){
    colnames(x) <- gsub("[degCelc]", "", colnames(x))
    colnames(x) <- gsub("[hPa]", "", colnames(x))
    colnames(x) <- gsub("[W/m**2]", "", colnames(x))
    colnames(x) <- gsub("[mm]", "", colnames(x))
    colnames(x) <- gsub("[%]", "", colnames(x))
    
    return(x)
  })
}


此操作成功运行。
稍后,作为代码中的一个步骤,我选择了要处理的列

sel_col <- c('D/T', 'Temp', 'Pres', 'SRad', 'Rain', 'ARad')


这给了我错误:

Error in .checkTypos(e, names_x) :
Object 'Temp1' not found. Perhaps you intended Moist [%], K [%] or 2 more

qhhrdooz

qhhrdooz1#

这就是你想要的:

cols <- c("D/T", "Temp [degCelc]", "Pres [hPa]", "SRad [W/m**2]", "Rain [mm]", "ARad [W/m**2]", "Moist [%]", "K [%]", "Temp1", "Press1")

# using base R 
gsub(" \\[.*\\]", "", cols)

# or using tidyverse

library(tidyverse)
str_replace(cols, " \\[.*\\]", "")

字符串
问题是在gsub("[hPa]", "", colnames(x))中,方括号没有被转义,所以它们需要被转义(这是R中正则表达式的一个很好的指南)。所以它匹配任何“h”、“P”或“a”--不是方括号,也不是方括号前的空格:

gsub("[degCelc]", "", "Temp [degCelc]") # [1] "Tmp []"

相关问题