Если все слова, которые вы хотите сопоставить, - это слова , которые можно идентифицировать посредством токенизации, как в приведенных вами примерах, я бы:
- tokenize,
- внутреннее соединение, затем
group_by()
и суммируйте.
library(tidyverse)
library(tidytext)
df1 <- tribble(~qtitle, ~avg_correct, ~attempts,
"Asthma and exercise, question 1", 54.32, 893,
"COVID19 and ventilators, q 3", 23.60, 143,
"Pedestrian vs. car MVCs", 74.19, 227,
"Hemophilia and monoclonal Abs", 34.56, 78,
"COVID19 and droplets", 83.21, 234
)
df2 <- tribble(~word, ~n,
"COVID19", 68,
"Trauma", 57,
"Hemophilia", 46) %>%
mutate(word = tolower(word))
df1 %>%
unnest_tokens(word, qtitle) %>%
inner_join(df2) %>%
group_by(word) %>%
summarise(avg_correct = mean(avg_correct),
attempts = sum(attempts),
n = first(n))
#> Joining, by = "word"
#> `summarise()` ungrouping output (override with `.groups` argument)
#> # A tibble: 2 x 4
#> word avg_correct attempts n
#> <chr> <dbl> <dbl> <dbl>
#> 1 covid19 53.4 377 68
#> 2 hemophilia 34.6 78 46
Создано 18.07.2020 с помощью пакета REPEX (v0.3.0)