我有一个像这样的数据:
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行。
答案 0 :(得分:3)
带有gsubfn
的选项。在\\d+
或-
将其转换为,
减去1并用numeric
将paste
提取后,我们提取数字(-
library(gsubfn)
gsubfn("[-,] ?(\\d+)", ~ paste0("-", as.numeric(x) - 1) , as.character(abc$a))
#[1] "[100-149)" "[150-199)"