我檢查了資料框“df1”的品牌是否
brands
1 Nike
2 Adidas
3 D&G
可以在資料框“df2”的以下列的元素中找到
statements
1 I love Nike
2 I don't like Adidas
3 I hate Puma
為此,我使用以下代碼:
subset_df2 <- df2[grepl(paste(df1$brands, collapse="|"), ignore.case=TRUE, df2$statements), ]
該代碼有效,我得到了 df2 的一個子集,其中僅包含具有所需品牌的行:
statements*
1 I love Nike
2 I don't like Adidas
還有一種方法可以顯示 df2$statements 中的哪個單元格元素與 df1$brands 完全匹配?例如,像 [Nike, Adidas] 這樣的向量。所以,我只想得到耐克和阿迪達斯元素作為我的輸出,而不是整個宣告。
提前謝謝了!
uj5u.com熱心網友回復:
brands <- c("nike", "adidas", "d&g") # lower-case here
text <- c("I love Nike", "I love Adidas")
ptns <- paste(brands, collapse = "|")
ptns
# [1] "nike|adidas|d&g"
text2 <- text[NA]
text2[grepl(ptns, text, ignore.case=TRUE)] <- gsub(paste0(".*(", ptns, ").*"), "\\1", text, ignore.case = TRUE)
text2
# [1] "Nike" "Adidas"
的預分配text[NA]是因為gsub如果沒有找到模式將不會改變。我正在使用text[NA],但我們也可以使用rep(NA_character_, length(text)),效果相同。
如果您需要多個匹配項text,那么也許
brands <- c("Nike", "Adidas", "d&g")
text <- c("I love nike", "I love Adidas and Nike")
ptns <- paste(brands, collapse = "|")
gre <- gregexpr(ptns, text, ignore.case = TRUE)
sapply(regmatches(text, gre), paste, collapse = ";")
# [1] "nike" "Adidas;Nike"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527002.html
標籤:rgrepl
上一篇:提取最長匹配字串R
下一篇:當包裝在renderUI和htmlOutput中時如何克服shinyDashboardvalueBox中的寬度引數被忽略
