首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过字符串匹配从其他数据中查找特定值

通过字符串匹配从其他数据中查找特定值
EN

Stack Overflow用户
提问于 2018-05-01 18:25:20
回答 4查看 408关注 0票数 3

下面我提到了两个数据框架:

DF1

代码语言:javascript
复制
ID     Value
AL-1   Adf "& ert
AL-2   new '? rti
AL-3   oll- drt/
AL-4   plr -rte-

DF2

代码语言:javascript
复制
Value        Type           
Adf & ert    AA
new  rti     AA
oll-drt&     AB
plr-rte      AC

所需产出:

代码语言:javascript
复制
ID     Value         Type
AL-1   Adf "& ert    AA
AL-2   new '? rti    AA
AL-3   oll- drt/     AB
AL-4   plr -rte-     AC

我希望将值列中的DF1字符与DF2值列的字符匹配,并导出Type

试着使用语音库,但还做不到,这里需要一些建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-01 18:35:32

您可以使用adist函数为df1$Value中的每个值获得与df2$Value相比较的字符串之间的近似“距离”。然后,您可以选择距离最小的(因此,精确匹配将被优先排序):

代码语言:javascript
复制
library(utils)
df1$Type <- df2$Type[apply(adist(df1$Value, df2$Value), 1, which.min)]

df1
#    ID      Value Type
#1 AL-1 Adf "& ert   AA
#2 AL-2 new '? rti   AA
#3 AL-3  oll- drt/   AB
#4 AL-4  plr -rte-   AC
票数 4
EN

Stack Overflow用户

发布于 2018-05-01 18:32:05

您可以在R中使用合并函数

代码语言:javascript
复制
df1=data.frame(ID=c("AL-1","AL-2","AL-3"),Value=c("Adf & ert","new '? rti","oll- drt/"))
df2=data.frame(Value=c("Adf & ert","new '? rti","oll- drt/"),Type=c("AA","AA","AB"))

df=merge(df1,df2,by = "Value")
票数 1
EN

Stack Overflow用户

发布于 2018-05-01 18:39:21

模糊匹配可能有效。

代码语言:javascript
复制
library(fuzzyjoin)

library(stringr)
DF1 %>% fuzzy_left_join(DF2, by = c("Value" = "Value"), match_fun = str_detect)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50121776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档