A tidyverse
возможность.Мы используем separate_rows
для разделения значений через запятую на разные строки, а затем выясняем, какие State
присутствуют в df1
для каждого CustomerId
, а затем выбираем только первое совпадение.
library(tidyverse)
bind_cols(df2, Verified_State =
df2 %>%
separate_rows(State) %>%
group_by(CustomerId) %>%
summarise(Verified_State = df1$State[which.max(df1$State %in% State)]) %>%
pull(Verified_State))
# CustomerId State Verified_State
#1 2 Alabama,NorthCaroline,Virginia Alabama
#2 4 Alabama,WestVirginia Alabama
#3 6 Ohio,Kentucky Ohio
Вышеуказанное будет работать, если в каждой строке будет хотя бы одно совпадение.Если может быть случай, когда совпадения вообще нет, мы можем проверить этот случай с условием if
bind_cols(df2, Verified_State =
df2 %>%
separate_rows(State) %>%
group_by(CustomerId) %>%
summarise(Verified_State = if(any(df1$State %in% State))
df1$State[which.max(df1$State %in% State)] else NA) %>%
pull(Verified_State))