在列名中替换和放置字符

问题描述 投票:1回答:1

我有以下变量名称:

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个回答
2
投票

我们可以成群结队。匹配.的模式(如果存在),后跟((元字符-因此请转义\\),然后捕获一个或多个数字(\\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"
© www.soinside.com 2019 - 2024. All rights reserved.