gsub/regex:删除因子变量中开始和结束的特殊字符
gsub/regex: deleting begining and end special characters in a factor variable
我正在使用以下矢量:
vec <- c("[0.81, 1]", "0.00 - 0.03", "0.04 - 0.27", "0.28 - 0.5", "0.51 - 0.8")
我有兴趣修改值"[0.81, 1]"中的值使其对应格式数字-数字
工作解决方案
目前我通过以下方式解决这个要求:
vec <- gsub("\[", "", vec, perl = TRUE)
vec <- gsub("\]", "", vec, perl = TRUE)
vec <- gsub(",", " - ", vec, fixed = TRUE)
代码产生所需的要求:
> vec
[1] "0.81 - 1" "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5" "0.51 - 0.8"
问题
我想使用更复杂的 gsub
和更花哨的 regex
来实现我的解决方案。我想提出 regex
语法:
- 匹配第一个 [ 和最后一个 ] 并删除它们/用空替换它们
- 或者更好的是,删除 [ 和 ] 并插入 -而不是中间的 ,。我猜这可能涉及使用
gsubfn
所以我不太喜欢这个解决方案
原则上我想实现减少 gsub
调用的次数。
尝试次数
我试过类似的东西:
\[(?![[:alnum:]])\]
- 它不匹配任何东西
\[(.*)\]
- 似乎完全匹配
我想达到的目标:
- 将前两个
gsub
个调用合并为一个
- 如果可能,将所有 3 个调用合并为一个
像这样使用捕获组:
sub("\[(.*), (.*)\]", "\1 - \2", vec)
## [1] "0.81 - 1" "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5" "0.51 - 0.8"
这是所用正则表达式的可视化:
\[(.*), (.*)\]
这不是一个正则表达式,也许正则专家会给出一个,但我将你的前两个调用与第二个调用组合在一个 oneliner 中:
v1 <- gsub("\[|\]","",gsub(","," -",vec))
请注意,我替换为“-”,而不是“-”,因为您的逗号后已经有空格。
我正在使用以下矢量:
vec <- c("[0.81, 1]", "0.00 - 0.03", "0.04 - 0.27", "0.28 - 0.5", "0.51 - 0.8")
我有兴趣修改值"[0.81, 1]"中的值使其对应格式数字-数字
工作解决方案
目前我通过以下方式解决这个要求:
vec <- gsub("\[", "", vec, perl = TRUE)
vec <- gsub("\]", "", vec, perl = TRUE)
vec <- gsub(",", " - ", vec, fixed = TRUE)
代码产生所需的要求:
> vec
[1] "0.81 - 1" "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5" "0.51 - 0.8"
问题
我想使用更复杂的 gsub
和更花哨的 regex
来实现我的解决方案。我想提出 regex
语法:
- 匹配第一个 [ 和最后一个 ] 并删除它们/用空替换它们
- 或者更好的是,删除 [ 和 ] 并插入 -而不是中间的 ,。我猜这可能涉及使用
gsubfn
所以我不太喜欢这个解决方案
原则上我想实现减少 gsub
调用的次数。
尝试次数
我试过类似的东西:
\[(?![[:alnum:]])\]
- 它不匹配任何东西\[(.*)\]
- 似乎完全匹配
我想达到的目标:
- 将前两个
gsub
个调用合并为一个 - 如果可能,将所有 3 个调用合并为一个
像这样使用捕获组:
sub("\[(.*), (.*)\]", "\1 - \2", vec)
## [1] "0.81 - 1" "0.00 - 0.03" "0.04 - 0.27" "0.28 - 0.5" "0.51 - 0.8"
这是所用正则表达式的可视化:
\[(.*), (.*)\]
这不是一个正则表达式,也许正则专家会给出一个,但我将你的前两个调用与第二个调用组合在一个 oneliner 中:
v1 <- gsub("\[|\]","",gsub(","," -",vec))
请注意,我替换为“-”,而不是“-”,因为您的逗号后已经有空格。