我是R的新手并且正在努力解决甚至可能无法正确询问的问题,但这就是我现在能够最好地表达它的方式。
我有两个不同的CSV文件读入R. dataA1
包含481242行和71列(即变量),其中一个是conm(即公司名称)。 dataB1
包含715列(变量)的1615行,其中一列是company.name。
来自dataB1
的1615个公司名称中的一些与dataA1
中的一些481242公司名称部分或完全匹配(重叠)。
我的目标是,在dataB1
中创建一个列,对于那些也在dataA1
(部分或完全相同的名称)中找到的公司,我将拥有1-s,并且0-那些在那里找不到的人。
任何想法如何做到这一点?
为了让您更好地了解数据的外观,这里是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
答案 0 :(得分:0)
我没有足够的细节,但我会考虑使用标志操作。标志运算符只是识别向量中的哪些值存在于相应的数据帧,向量等中。对于您的示例,我将执行以下操作:
dataB1 <- toupper(dataB1)
flag <- dataB1 %in% dataA1
如果值在dataA1中完全匹配,则此代码将给出TRUE
,否则以向量的形式给出FALSE
。
答案 1 :(得分:0)
您可以尝试amatch
包的stringdist
功能,例如:
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[res],
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
在基本软件包中,函数agrep
可以执行部分匹配,但它没有矢量化,也没有多线程。