与grepl R完全匹配
我试图用grepl从数据帧中提取某些记录 这是基于两列结果和名称之间的比较。这个变量的构建方式类似于“WordNumber”,但对于同一个单词,我有多个数字(超过30个),因此当我使用grepl表达式获取例如Word1时,我也会得到我想要避免的结果,比如Word12 有没有办法解决这个问题与grepl R完全匹配,r,grepl,R,Grepl,我试图用grepl从数据帧中提取某些记录 这是基于两列结果和名称之间的比较。这个变量的构建方式类似于“WordNumber”,但对于同一个单词,我有多个数字(超过30个),因此当我使用grepl表达式获取例如Word1时,我也会得到我想要避免的结果,比如Word12 有没有办法解决这个问题 Names <- c("Word1") colnames(Names) <- name Results <- c("Word1", "Word11", "Word12", "Word15")
Names <- c("Word1")
colnames(Names) <- name
Results <- c("Word1", "Word11", "Word12", "Word15")
Records <- c("ThisIsTheResultIWant", "notThis", "notThis", "notThis")
Relationships <- data.frame(Results, Records)
Relationships <- subset(Relationships, grepl(paste(Names$name, collapse = "|"), Relationships$Results))
因为我正在连接,所以我不确定如何使用\b来强制执行完全匹配
有什么建议吗?使用“^”匹配字符串的开头,使用“$”匹配字符串的结尾
Names <-c('^Word1$')
Names除了@Richard的解决方案外,还有多种方法可以强制执行完全匹配
\b
“\b”是用于在模式之前/之后标识单词的锚点
\< & \>
“\”用于结束
>grepl(“\\”,c(“Word1”、“Word2”、“Word12”))
[1] 真假假假
我认为这只是:
Relationships[Relationships$Results==Names,]
如果你最后做的是^Word1$
,你只是在做一个简单的子集。
如果您有多个名称,请改用:
Relationships[Relationships$Results %in% Names,]
我认为这只是Relationships[Relationships$Results==Names,]
——如果你最终做的是^Word1$
,那么你只是在做一个简单的子集。如果您有多个名称,则改为Relationships[Relationships$Results%in%names]
。@thelatemail它工作得很好,非常感谢!你能把它作为一个答案贴出来吗?如果是一个列表,这将如何工作?我不能直接指定要匹配的单个单词。名称
> grepl("\\bWord1\\b",c("Word1","Word2","Word12"))
[1] TRUE FALSE FALSE
> grepl("\\<Word1\\>",c("Word1","Word2","Word12"))
[1] TRUE FALSE FALSE
Relationships[Relationships$Results==Names,]
Relationships[Relationships$Results %in% Names,]