【问题标题】:Substitute and drop characters in column names在列名中替换和删除字符
【发布时间】:2020-02-10 16:49:28
【问题描述】:

我有以下变量名:

vars <- c("var-1.caps(12, For]","var2(5,For]","var-3.tree.(15, For]","var-3.tree.(30, For]")

我需要清理这些名称以获得以下结果:

clean_vars <- c("var1.caps_12_For","var2_5_For","var3.tree_15_For","var3.tree_30_For")

所以,基本上我想放弃-(]

我正在使用这种方法:

gsub("\\(.*\\]","",vars)

但它会丢弃(] 之间的所有内容。它既不丢弃符号-

【问题讨论】:

    标签: r regex gsub


    【解决方案1】:

    我们可以作为一个组进行捕获。匹配 . 的模式(如果存在),后跟 ((元字符 - 所以转义 \\),后跟作为组捕获的一个或多个数字(\\d+)((...)),然后是, 和零个或多个空格 (\\s*),然后捕获单词 ([A-Za-z]+) 作为第二个捕获组。在替换中,指定捕获组的反向引用(\\1\\2)以及_,以获得预期的输出

    out <-  sub("\\.?\\((\\d+),\\s*([A-Za-z]+)\\]$", "_\\1_\\2", vars)
    out
    #[1] "var-1.caps_12_For" "var2_5_For"        "var-3.tree_15_For" "var-3.tree_30_For"
    
    sub('-', '', out)
    #[1] "var1.caps_12_For" "var2_5_For"       "var3.tree_15_For" "var3.tree_30_For"
    

    【讨论】:

    • @Fluxy 我检查了你的clean_vars,它与显示的输出相匹配
    • 抱歉,我看到的是 var-1.caps_12_For 而不是 var1.caps_12_For。还是我错过了什么?
    • @Fluxy 抱歉,我错过了那部分。更新
    • 我是否理解正确,如果出现多次,最好使用gsub
    • @Fluxy 如果你不想插入_gsub("\\]|-|\\.?\\(|(?&lt;=,)\\s*", "", vars, perl = TRUE)。应该。工作
    猜你喜欢
    • 1970-01-01
    • 2022-12-07
    • 2022-08-14
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2021-07-16
    • 2021-12-19
    相关资源
    最近更新 更多