Можно было бы разделить «группы» по разделителю ,
, чтобы расширить строки с помощью separate_rows
, выполнить объединение с набором данных ключ / val ('df_2'), сгруппированным по элементу, получитьsum
'значений'
library(tidyverse)
df_1 %>%
separate_rows(groups) %>%
left_join(df_2) %>%
group_by(element) %>%
summarise(groups = toString(groups), sum = sum(values))
# A tibble: 2 x 3
# element groups sum
# <int> <chr> <int>
#1 1 A, B, C 6
#2 2 A, D 5
Или другой вариант с base R
будет использовать именованный ключ / значение vector
'nm1') для изменения значений в разделенномlist
элементов, sum
и назначить его новому столбцу в 'df_1'
nm1 <- setNames(df_2$values, df_2$groups)
df_1$sum <- sapply(strsplit(as.character(df_1$groups), ","), function(x) sum(nm1[x]))