与 R 中的 GREPL 和 WITH 函数匹配的字符串
String matching with GREPL and WITH functions in R
我希望删除数据框中不符合特定列中正则表达式的任何行,即单元格必须以两个字符开头,后跟四个数字,之后我不关心它是 U09 还是 U21 .前 6 个字符很重要。
我正在使用以下代码,但返回了 0 行,我不确定为什么:
with(prachData, prachData[grepl("^[A-Z][A-Z][0-9]{4}$", WCEL.name), ])
当我键入 head(prachData$WCEL.name)
时,我得到以下详细信息:
> head(prachData$WCEL.name)
[1] 0 0 CE0001U21B2 CE0001U21A3 CE0001U21C1 CE0001U21B1
13684 Levels: 0 1 11 12 13 2 21 22 23 3 31 32 33 CE0001U09A3 CE0001U09B3 CE0001U09C3 CE0001U21A1 CE0001U21A2 ... WX0114U09C3
并使用 class(prachData$WCEL.name)
我得到:
[1] "factor"
谁能指导我改正错误?
问题似乎是在模式中使用 $
这意味着字符串的结尾,因为它是一个元字符,但根据显示的输入,情况并非如此,因为在 4 位数字之后也是其他字符,即字符串不是仅以 6 个字符结尾,因此对于 OP 的模式,grepl
将 return FALSE。相反,它可以是,
with(prachData, prachData[grepl("^[A-Z][A-Z][0-9]{4}", WCEL.name), ])
展示一个可重现的例子
v1 <- factor(c(0, 0, 'CE0001U21B2', 'CE0001U21A3',
'CE0001U21C1', 'CE0001U21B1'))
grepl("[A-Z]{2}[0-9]{4}$", v1)
#[1] FALSE FALSE FALSE FALSE FALSE FALSE
return都是假的
因此,当我们根据上述索引对 'v1' 进行子集时,
v1[grepl("[A-Z]{2}[0-9]{4}$", v1)]
#factor(0)
#Levels: 0 CE0001U21A3 CE0001U21B1 CE0001U21B2 CE0001U21C1
它return长度为 0。
而
grepl("[A-Z]{2}[0-9]{4}", v1)
#[1] FALSE FALSE TRUE TRUE TRUE TRUE
我希望删除数据框中不符合特定列中正则表达式的任何行,即单元格必须以两个字符开头,后跟四个数字,之后我不关心它是 U09 还是 U21 .前 6 个字符很重要。
我正在使用以下代码,但返回了 0 行,我不确定为什么:
with(prachData, prachData[grepl("^[A-Z][A-Z][0-9]{4}$", WCEL.name), ])
当我键入 head(prachData$WCEL.name)
时,我得到以下详细信息:
> head(prachData$WCEL.name)
[1] 0 0 CE0001U21B2 CE0001U21A3 CE0001U21C1 CE0001U21B1
13684 Levels: 0 1 11 12 13 2 21 22 23 3 31 32 33 CE0001U09A3 CE0001U09B3 CE0001U09C3 CE0001U21A1 CE0001U21A2 ... WX0114U09C3
并使用 class(prachData$WCEL.name)
我得到:
[1] "factor"
谁能指导我改正错误?
问题似乎是在模式中使用 $
这意味着字符串的结尾,因为它是一个元字符,但根据显示的输入,情况并非如此,因为在 4 位数字之后也是其他字符,即字符串不是仅以 6 个字符结尾,因此对于 OP 的模式,grepl
将 return FALSE。相反,它可以是,
with(prachData, prachData[grepl("^[A-Z][A-Z][0-9]{4}", WCEL.name), ])
展示一个可重现的例子
v1 <- factor(c(0, 0, 'CE0001U21B2', 'CE0001U21A3',
'CE0001U21C1', 'CE0001U21B1'))
grepl("[A-Z]{2}[0-9]{4}$", v1)
#[1] FALSE FALSE FALSE FALSE FALSE FALSE
return都是假的
因此,当我们根据上述索引对 'v1' 进行子集时,
v1[grepl("[A-Z]{2}[0-9]{4}$", v1)]
#factor(0)
#Levels: 0 CE0001U21A3 CE0001U21B1 CE0001U21B2 CE0001U21C1
它return长度为 0。
而
grepl("[A-Z]{2}[0-9]{4}", v1)
#[1] FALSE FALSE TRUE TRUE TRUE TRUE