R 在列名中替换和删除字符

R 在列名中替换和删除字符,r,regex,gsub,R,Regex,Gsub,我有以下变量名称: vars <- c("var-1.caps(12, For]","var2(5,For]","var-3.tree.(15, For]","var-3.tree.(30, For]") 但它会删除(和]之间的所有内容。它也不会删除符号-,我们可以将其作为一个组捕获。如果存在的模式,请匹配该模式,然后是一个((元字符-因此转义\),然后是一个或多个作为组捕获的数字(\\d+)((…)),后跟、和零个或多个空格(\\s*),然后捕获单词([a-Za-z]+)作为第二个捕获

我有以下变量名称:

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

但它会删除
]
之间的所有内容。它也不会删除符号
-

,我们可以将其作为一个组捕获。如果存在
的模式,请匹配该模式,然后是一个
(元字符-因此转义
\
),然后是一个或多个作为组捕获的数字(
\\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"

out@Fluxy我检查了你的
clean_vars
并且它与显示的输出匹配抱歉,我看到
var-1.caps_12_For
而不是
var1.caps_12_For
。或者我遗漏了什么吗?@Fluxy抱歉,我遗漏了那部分。更新了我是否正确理解在多次发生的情况下,最好使用
gsub
?@Fluxy如果您不想插入
\uu
gsub(“\\]\124;-\\\。?\”(?)?
gsub("\\(.*\\]","",vars)
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"