簡體   English   中英

與 grepl R 完全匹配

[英]Exact match with grepl R

我正在嘗試使用 grepl 從數據框中提取某些記錄。

這是基於兩列結果和名稱之間的比較。 這個變量是這樣構建的,但是對於同一個單詞,我有多個數字(超過 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則它根本不返回任何結果(這很奇怪)。 我也嘗試將名稱部分與這樣的其他數字連接,但沒有成功:

Relationships <- subset(Relationships, grepl(paste(paste(Names$name, '3', sep = ""), collapse = "|"), Relationships$Results))

由於我正在連接,因此我不太確定如何使用 \\b 來強制執行完全匹配。

有什么建議?

除了@Richard 的解決方案之外,還有多種方法可以強制執行完全匹配。

\\b

“\\b”是在模式之前/之后識別單詞的錨點

> grepl("\\bWord1\\b",c("Word1","Word2","Word12"))
[1]  TRUE FALSE FALSE

\\< & \\>

"\\<" 是單詞開頭的轉義序列,">" 用於結尾

> grepl("\\<Word1\\>",c("Word1","Word2","Word12"))
[1]  TRUE FALSE FALSE

使用 ^ 匹配字符串的開頭,使用 $ 匹配字符串的結尾

Names <-c('^Word1$')

或者,應用於整個名稱向量

Names <-paste0('^',Names,'$')

我認為這只是:

Relationships[Relationships$Results==Names,]

如果你最終做^Word1$你只是在做一個直接的子集。 如果您有多個名稱,請改用:

Relationships[Relationships$Results %in% Names,]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM