簡體   English   中英

使用具有多個條件的部分匹配對df進行子集

[英]Subset a df using partial match with multiple criteria

這是數據集:

company <- c("Coca-Cola Inc.", "DF, CocaCola", 
         "COCA-COLA", "PepsiCo Inc.", "Beverages Distribution")
brand  <- c("Coca-Cola Zero","N/A", "Coca-Cola", "Pepsi", "soft drink")
vol  <- c("2456","1653", "19", "2766", "167")
data   <-data.frame(company, brand, vol)
data

結果是:

                 company             brand    vol
1         Coca-Cola Inc.    Coca-Cola Zero   2456
2           DF, CocaCola               N/A   1653
3              COCA-COLA          CocaCola     19
4           PepsiCo Inc.             Pepsi   2766
5 Beverages Distribution        soft drink    167

假設這是按品牌划分的進口量。

任務是對數據框進行替換,以僅查看與可口可樂相關的觀察結果,而不能查看其他任何品牌。

  • 問題在於可口可樂的書寫方式多種多樣。
  • 此外,我們知道飲料分銷公司僅進口可口可樂,即使未在上表中指明。

我們需要將COMPANY和BRAND變量與一系列條件(鍵)進行部分匹配:

company_key <- c("coca-", "cocacola", "coca cola", "beverages distribution")
brand_key <- c("coca-", "cocacola", "coca cola")

我正在努力執行這個想法:

如果品牌部分匹配brand_key向量中的任何鍵或公司部分匹配company_key中的任何鍵,則子數據

因此,僅保留其中的行:

品牌觀察部分匹配“可口可樂”或“可口可樂”或“可口可樂”)

要么

公司觀察部分匹配“可口可樂”或“可口可樂”或“可口可樂”或“飲料分銷”)

注意:需區分大小寫

理想的輸出:

                 company             brand    vol
1         Coca-Cola Inc.    Coca-Cola Zero   2456
2           DF, CocaCola               N/A   1653
3              COCA-COLA          CocaCola     19
4 Beverages Distribution        soft drink    167

有任何想法嗎? 提前致謝 :)

使用正則表達式及其| (或)運算符。 參數ignore.case處理大小寫。

index <- grepl(paste0(company_key, collapse = "|"), data$company, ignore.case = TRUE) |
    grepl(paste0(brand_key, collapse = "|"), data$company, ignore.case = TRUE)

data[index,]  

#                 company          brand  vol
#1         Coca-Cola Inc. Coca-Cola Zero 2456
#2           DF, CocaCola            N/A 1653
#3              COCA-COLA      Coca-Cola   19
#5 Beverages Distribution     soft drink  167

考慮到coca后面可以加上破折號或可樂,然后加上可選的空格。 我將兩列粘貼在一起以進行coca搜索,並對Beverage Distribution進行不同的測試

data[grepl("coca-|(\\s*cola)", paste(data[,1], data[,2]), ignore.case = T) |
       grepl("Beverages Distribution",data[,1]),]
#                  company          brand  vol
# 1         Coca-Cola Inc. Coca-Cola Zero 2456
# 2           DF, CocaCola            N/A 1653
# 3              COCA-COLA      Coca-Cola   19
# 5 Beverages Distribution     soft drink  167

如果Beverage Distribution只能完全匹配,則可能需要將第二部分更改為data[,1] == "Beverages Distribution"

暫無
暫無

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

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