R:通过从值中减去 1 来更改圆括号间隔数

R: change round brace interval number by subtracting 1 from the value

我有一个数据是这样的:

abc <- data.frame( a = c("[100-150)", "[150, 200)"))

我想把它改成这样:

abc <- data.frame(a = c("100-149", "150-199"))

我知道如何替换括号:

abc$a <- lapply(abc$a, gsub, pattern = "[", replacement = "", fixed = TRUE)
abc$a <- lapply(abc$a, gsub, pattern = "]", replacement = "", fixed = TRUE)
abc$a <- lapply(abc$a, gsub, pattern = ")", replacement = "", fixed = TRUE)

问题是从末尾减1。

有办法吗?

请注意,这只是一个例子,实际上我的数据有这样一列,大约有 2000 行。

带有 gsubfn 的选项。我们在 -, 之后提取数字 (\d+) 将其转换为 numeric 减去 1 和 paste-

library(gsubfn)
gsubfn("[-,] ?(\d+)",  ~ paste0("-", as.numeric(x) - 1) , as.character(abc$a))
#[1] "[100-149)" "[150-199)"