为什么grepl在这里不对单个列起作用,而在其他地方起作用?[副本]

fnvucqvd  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(100)

此问题已在此处有答案

[How do I deal with special characters like ^$.?*|+(){ in my regex?(3个答案)
13天前关闭
这是我的数据。

CPUInfo <- matrix(data = c("processor# 1", "Intel", "Intel(R)-Xeon(R)[email protected]", "processor# 2", "Intel", "Intel(R)-Xeon(R)[email protected]"), ncol = 3, byrow = T)

我需要计算这些表中的每个处理器。然而,当我尝试sum(grep(...))方法时,它不适用于此列(第3列)。我甚至试着用这个简单的命令检查。

> grepl(CPUInfo[1,3], CPUInfo[,3])
[1] FALSE FALSE
> grepl(CPUInfo[1,2], CPUInfo[,2])
[1] TRUE TRUE

专栏里的东西怎么会不在专栏里呢?

b0zn9rqh

b0zn9rqh1#

正则表达式中的括号有special meaning,所以grepl有一个fixed函数来解决这个问题(正如@jarod_mamrot在评论中提到的那样):

grepl(CPUInfo[1,3], CPUInfo[,3], fixed = TRUE)
# [1] TRUE TRUE

一般来说,你可以使用"[()]"模式删除gsub的括号:

gsub("[()]", "", CPUInfo[1,3])

# [1] "[email protected]"

那么:

grepl(gsub("[()]", "", CPUInfo[1,3]), 
      gsub("[()]", "", CPUInfo[,3]))

[1] TRUE TRUE

或者在流行的stringr包中使用str_remove_all

grepl(stringr::str_remove_all(CPUInfo[1,3], "[()]"),
      stringr::str_remove_all(CPUInfo[,3], "[()]"))

[1] TRUE TRUE

相关问题