[英]R match whole words in phrases
我有一個字符向量
var1 <- c("pine tree", "forest", "fruits", "water")
和一個清單
var2 <- list(c("tree", "house", "star"), c("house", "tree", "pine tree", "tree pine", "dense forest"), c("apple", "orange", "grapes"))
我想將 var1 中的單詞與 var2 中的單詞匹配,並提取 var2 中的最大匹配元素。 例如,
[[1]]
[1] "tree" "house" "star"
與 var1 有 1 場比賽
[[2]]
[1] "house" "tree" "pine tree" "tree pine" "dense forest"
與 var1 有 4 個匹配項
[[3]]
[1] "apple" "orange" "grapes"
與 var1 有 0 個匹配
所需的輸出如下:
[[2]]
[1] "house" "tree" "pine tree" "tree pine" "dense forest"
我試過
sapply(var1, grep, var2, ignore.case=T, value=T)
沒有獲得所需的輸出。
如何解決? 代碼片段將不勝感激。 謝謝。
我們為grepl
創建一個模式字符串 ('pat'),首先將 'var1' 用空格'\\\\s+'
分割。 輸出將是一個列表。 我們使用sapply
循環遍歷列表,使用帶有collapse= '|'
paste
,然后使用另一個paste
將整個向量折疊為單個字符串。 的|
在v1
用作grepl
模式時充當OR
。 sum
向量 ('v1') 將用於根據問題中描述的條件對list
'var2' 進行子集化。
pat <- paste(sapply(strsplit(var1, '\\s+'), function(x)
paste(unique(c(x, paste(x, collapse=' '))), collapse='|')),
collapse='|')
v1 <- sapply(var2, function(x) sum(grepl(pat, x)))
v1
#[1] 1 4 0
var2[which.max(v1)]
#[[1]]
#[1] "house" "tree" "pine tree" "tree pine" "dense forest"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.