Мы можем создать индекс строки для каждого фрейма данных, а затем full_join
на основе столбца Name
. Затем мы выбираем только те строки, в которых Region
частично совпадает, а Job
и State
частично совпадают. Мы также выбираем строки, когда оба столбца имеют значения NA
.
library(dplyr)
library(stringr)
df1 %>%
mutate(Column1=row_number()) %>%
full_join(df2 %>% mutate(Column2 = row_number()), by = 'Name') %>%
filter((str_detect(Region.x, fixed(Region.y)) |
(is.na(Region.x) & is.na(Region.y))) &
(str_detect(Job, fixed(State)) | (is.na(Job) & is.na(State)))) %>%
select(Column1, Column2)
# Column1 Column2
#1 1 3
#2 2 2
данные
df1 <- structure(list(Name = c("A", "B", "C"), Region = c("BostonCity",
"WashingtonD.C.", "NewYork"), State = c("Mass", NA, "NY")), row.names = c(NA,
-3L), class = "data.frame")
df2 <- structure(list(Name = c("C", "B", "A", "D"), Region = c("Boston",
"D.C.", "Boston", "Dallas"), Job = c("Massachusetts", NA, "Massachusetts",
"Texas")), row.names = c(NA, -4L), class = "data.frame")