我有两个数据框:
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
,但两个数据帧的值Value1
和Value2
都有相似之处。
必需输出:
ID Value1 Assign
1 Lion AD
2 Cat FD
3 Elephant DS
4 Lion -s AD
答案 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