簡體   English   中英

如何在R中的部分匹配中檢查來自兩個不同數據幀的兩個字符串列?

[英]how to check two string columns from two different dataframes on partial matching in R?

我是 R 的新手,正在努力解決一些甚至可能不會被正確詢問的問題,但這就是我此刻可以最好地表達它的方式。 我有兩個不同的 CSV 文件讀入dataA1包含 481242 行和 71 列(即變量),其中之一是 conm(即公司名稱)。 dataB1包含 7 列(變量)的 1615 行,其中之一是 company.name。

一些從1615個公司名稱dataB1部分或完全用一些從481242個公司名稱的匹配(重疊) dataA1

我的目標是,在dataB1中創建一個列,其中對於在dataA1找到的那些公司(部分或完全相同的名稱),我將使用 1-s,對於在dataA1找不到的那些公司,使用 0-s。

任何想法如何做到這一點?

為了讓您更好地了解數據的外觀,這里是dataA1

1-PAGE LTD
3I GROUP PLC
3I INFOTECH LTD
401 HOLDINGS LTD
4CS HOLDINGS CO LTD
55 STATION INC
600 GROUP PLC (THE)
7DIGITAL GROUP PLC

以及需要從dataB1匹配的列:

1-Page Ltd
180 Connect Inc
3DLabs Inc., Ltd.
3M France
3U Holdings AG
4Imprint Group Plc
724 Solutions Inc
7days music entertainment AG

我沒有足夠的細節,但我會考慮使用標志操作。 標志運算符僅標識向量中的哪些值存在於相應的數據框、向量等中。對於您的示例,我將執行以下操作:

dataB1 <- toupper(dataB1)
flag   <- dataB1 %in% dataA1

如果某個值在 dataA1 中完全匹配,則此代碼將給出TRUE ,否則以向量的形式給出FALSE

您可以嘗試包stringdist amatch函數,例如:

library(stringdist)

toSearch <- c("1-PAGE LTD","3I GROUP PLC","3I INFOTECH LTD","401 HOLDINGS LTD",
              "4CS HOLDINGS CO LTD", "55 STATION INC","600 GROUP PLC (THE)",
              "7DIGITAL GROUP PLC")

lookupTable <- c("1-Page Ltd", "180 Connect Inc", "3DLabs Inc., Ltd.",
                 "3M France","3U Holdings AG", "4Imprint Group Plc", "724 Solutions Inc",
                 "7days music entertainment AG")

acceptableDistanceThresh = 0.23
lookupTableIndex <- amatch(toupper(toSearch),
                           toupper(lookupTable),
                           method='jw',
                           maxDist=acceptableDistanceThresh,
                           nthread = 4)


res <- data.frame(toSearch,
                  lookupTableValue=lookupTable,
                  lookupTableIndex=lookupTableIndex)

> res
                 toSearch   lookupTableValue lookupTableIndex
1          1-PAGE LTD         1-Page Ltd                1
2        3I GROUP PLC               <NA>               NA
3     3I INFOTECH LTD               <NA>               NA
4    401 HOLDINGS LTD     3U Holdings AG                5
5 4CS HOLDINGS CO LTD               <NA>               NA
6      55 STATION INC               <NA>               NA
7 600 GROUP PLC (THE)               <NA>               NA
8  7DIGITAL GROUP PLC 4Imprint Group Plc                6

在 base 包中有一個函數agrep可以執行部分​​匹配,但它不是矢量化的,也不是多線程的。

暫無
暫無

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

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