R: изменить номер интервала в круглых скобках, вычитая 1 из значения - PullRequest
1 голос
/ 31 мая 2019

У меня есть данные, которые выглядят примерно так:

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 Ответ

3 голосов
/ 31 мая 2019

Опция с gsubfn. Мы извлекаем числа (\\d+) после преобразования - или , в numeric, вычитаем 1 и paste с -

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