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

时间:2019-05-31 20:40:17

标签: r dataframe gsub brackets

我有一个像这样的数据:

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行。

1 个答案:

答案 0 :(得分:3)

带有gsubfn的选项。在\\d+-将其转换为,减去1并用numericpaste提取后,我们提取数字(-

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