与 grepl R 完全匹配
Exact match with grepl R
我正在尝试使用 grepl 从数据框中提取某些记录。
这是基于 Result 和 Names 两列之间的比较。这个变量是这样构建的 "WordNumber" 但是对于同一个词我有多个数字(超过 30),所以当我使用 grepl 表达式来获取例如 Word1 时,我也会得到我想避免的结果,比如Word12.
关于如何解决这个问题有什么想法吗?
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))
这是行不通的,如果我使用 fixed = TRUE
而它 return 根本没有任何结果(这很奇怪)。我也试过像这样将名称部分与其他数字连接起来,但没有成功:
Relationships <- subset(Relationships, grepl(paste(paste(Names$name, '3', sep = ""), collapse = "|"), Relationships$Results))
因为我在串联,所以我不太确定如何使用 \b 强制执行完全匹配。
有什么建议吗?
使用^匹配字符串的开头,使用$匹配字符串的结尾
Names <-c('^Word1$')
或者,应用于整个名称向量
Names <-paste0('^',Names,'$')
除了@Richard 的解决方案之外,还有多种方法可以强制执行完全匹配。
\b
"\b" is an anchor to identify word before/after pattern
> grepl("\bWord1\b",c("Word1","Word2","Word12"))
[1] TRUE FALSE FALSE
\< & \>
"\<" is an escape sequence for the beginning of a word, and ">" is used for end
> grepl("\<Word1\>",c("Word1","Word2","Word12"))
[1] TRUE FALSE FALSE
我认为这只是:
Relationships[Relationships$Results==Names,]
如果你最终做 ^Word1$
你只是在做一个直接的子集。
如果您有多个名称,请改用:
Relationships[Relationships$Results %in% Names,]
我正在尝试使用 grepl 从数据框中提取某些记录。
这是基于 Result 和 Names 两列之间的比较。这个变量是这样构建的 "WordNumber" 但是对于同一个词我有多个数字(超过 30),所以当我使用 grepl 表达式来获取例如 Word1 时,我也会得到我想避免的结果,比如Word12.
关于如何解决这个问题有什么想法吗?
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))
这是行不通的,如果我使用 fixed = TRUE
而它 return 根本没有任何结果(这很奇怪)。我也试过像这样将名称部分与其他数字连接起来,但没有成功:
Relationships <- subset(Relationships, grepl(paste(paste(Names$name, '3', sep = ""), collapse = "|"), Relationships$Results))
因为我在串联,所以我不太确定如何使用 \b 强制执行完全匹配。
有什么建议吗?
使用^匹配字符串的开头,使用$匹配字符串的结尾
Names <-c('^Word1$')
或者,应用于整个名称向量
Names <-paste0('^',Names,'$')
除了@Richard 的解决方案之外,还有多种方法可以强制执行完全匹配。
\b
"\b" is an anchor to identify word before/after pattern
> grepl("\bWord1\b",c("Word1","Word2","Word12"))
[1] TRUE FALSE FALSE
\< & \>
"\<" is an escape sequence for the beginning of a word, and ">" is used for end
> grepl("\<Word1\>",c("Word1","Word2","Word12"))
[1] TRUE FALSE FALSE
我认为这只是:
Relationships[Relationships$Results==Names,]
如果你最终做 ^Word1$
你只是在做一个直接的子集。
如果您有多个名称,请改用:
Relationships[Relationships$Results %in% Names,]