我有一个这样的向量:
vec <- c("a + 17", "äÜ - 20*3")
有不同的字母、数字和运算符。我想摆脱这些信件。或者,反过来,只保留数字和运算符。这是我正在寻找的结果:
c("17", "-20*3")
我试过
gsub("[:alpha:]", "", vec)
但它不起作用而且我不明白为什么因为 [:alpha:]
应该删除任何字母然后我应该得到我正在寻找的矢量。但事实并非如此。
我发现一个类似的问题但它也没有帮助我。
这是使用
gsub
的不同方法:
x <- gsub("[^0-9+-/*]", "", vec)
c(as.numeric(x)[1], x[2])
输出:
[1] "17" "-20*3"
Warning message:
NAs introduced by coercion
是的,您可以通过
gsub
实现它,但是您的正则表达式是错误的。尝试应用下一个:
vec <- c("a + 17", "djdj - 20*3 + äÜ - 2")
vec <- gsub("[[:alpha:]]+", "", vec) # remove one or more letters
vec <- gsub("\\s+", "", vec) # remove whitespace
甚至
gsub("[^0-9\\*\\+\\-\\/]+", "", vec) # remove all that isn't a number, minus, divide, times, plus or whitespace
这是一个非正则表达式的方法。从你的矢量开始:
vec <- c("a + 17", "äÜ - 20*3")
首先,定义一个允许的字符列表:
good <- c(0:9, "+", "-", "*", "/", "^")
然后,将向量拆分为字符元素,只保留相交的元素:
vec <- lapply(strsplit(vec, ""), \(x) x[x %in% good])
最后 - 将元素连接在一起:
vec <- sapply(vec, paste0, collapse="")
vec
[1] "+17" "-20*3"