我有以下变量名称:
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)
但是它会丢弃(
和]
之间的所有内容。它也不会删除符号-
。
我们可以成群结队。匹配.
的模式(如果存在),后跟(
(元字符-因此请转义\\
),然后捕获一个或多个数字(\\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"