如何根据R中的字符串匹配赋值

时间:2018-03-18 17:33:07

标签: r dataframe dplyr tidyr

我有两个数据框:

DF_1

ID      Value1
1       Lion
2       Cat
3       Elephant
4       Lion -s

DF_2

Value2          Assign
Lion - X        AD
Cat as          FD
Elephant -92    DS
Viper           AB
Fish ws r       DF

我想将DF_1的Value1与DF_2的Value2进行匹配,因为DF_2中DF_1的任何类似值都会在新输出数据帧中分配DF_2的Assign列(使用基于合并的在Value1)。

上面提到的数据帧仅用于样本,我的数据帧非常大且具有不同的Value1,但两个数据帧的值Value1Value2都有相似之处。

必需输出:

ID      Value1     Assign
1       Lion       AD
2       Cat        FD
3       Elephant   DS
4       Lion -s    AD

1 个答案:

答案 0 :(得分:1)

一种方法是提取第一个"字"通过正则表达式,然后匹配该提取的小写版本:

library(tidyverse)

DF_1 <- data_frame(
  ID = 1:7,
  Value1 = c('Lion', 'Cat', 'Elephant', 'Lion -s', 'Lion<4?2', 'lion s', 'Lion-xe')
)

DF_2 <- data_frame(
  Value2 = c('Lion - X', 'Cat as', 'Elephant -92', 'Viper', 'Fish ws r'),
  Assign = c('AD', 'FD', 'DS', 'AB', 'DF')
)

DF_1$first_word <- str_extract(DF_1$Value1, "\\w+") %>% str_to_lower()
DF_2$first_word <- str_extract(DF_2$Value2, "\\w+") %>% str_to_lower()

DF_1 %>%
  left_join(DF_2, by = "first_word")
#> # A tibble: 7 x 5
#>      ID Value1   first_word Value2       Assign
#>   <int> <chr>    <chr>      <chr>        <chr> 
#> 1     1 Lion     lion       Lion - X     AD    
#> 2     2 Cat      cat        Cat as       FD    
#> 3     3 Elephant elephant   Elephant -92 DS    
#> 4     4 Lion -s  lion       Lion - X     AD    
#> 5     5 Lion<4?2 lion       Lion - X     AD    
#> 6     6 lion s   lion       Lion - X     AD    
#> 7     7 Lion-xe  lion       Lion - X     AD