将字符串替换为相应的匹配字符

时间:2016-06-27 09:35:39

标签: r

我需要用df1中的部分匹配字符串替换df2中的字符串。

与1MG一样,解决方案在df1中也有1MG,因此需要用df1中的1MG替换它。 这需要为数百万条记录完成。

  > df1
          A       
        1MG             
        ABOF          
        Amazon        
        American Swan
        Clovia       

    > df2


      A                 B                                          
1MG Solution           1MG
ABOF Prime             ABOF
Dual Command           NA
Amazon AWF             AMazon
American Swan Fi       AMerican Swan
Clovia World Spaces    Clovia
Shape Makers           NA
Unions                 NA

2 个答案:

答案 0 :(得分:1)

stringr包非常适合此类操作,

library(stringr)
df2$B <- str_extract(df2$A, paste(df1$A, collapse = '|'))
df2
#                    A             B
#1        1MG Solution           1MG
#2          ABOF Prime          ABOF
#3        Dual Command          <NA>
#4          Amazon AWF        Amazon
#5    American Swan Fi American Swan
#6 Clovia World Spaces        Clovia
#7        Shape Makers          <NA>
#8              Unions          <NA>

注意:您需要将变量转换为字符(如果它们是因子)

答案 1 :(得分:0)

通过使用grep功能,您可以查找第一个数据帧中的任何模式是否存在于秒中。
例如:

df <- data.frame(A=c("1MG","ABOF","Amazon","American Swan","Clovia"))
label=c("1MG Sol","ABOF Prim",
"Dual Command","Amazon AWF","something else",
"American Swan Fi","Clovia World Spaces")
apply(df,1,function(x) grep(x,label)) #will return the matching postion

apply函数将返回匹配位置:

> apply(df,1,function(x) grep(x,label))
[1] 1 2 4 6 7

我认为你可以用这种方式找到解决方案