Мы split
столбец 'Name' в 'df2' группы 'в list
из vector
s, используем его для подстановки столбцов в' df1 ', получаем rowSums
и создаемновый набор данных со столбцом «Имя» из «df1» и столбцами суммы из lapply
выходных данных
df3 <- df1['Name']
df3[c('A', 'B')] <- lapply(split(df2$Name, df2$Group), function(x) rowSums(df1[x]))
df3
# Name A B
#1 banana 4 8
#2 apple 10 15
#3 pear 18 3
или с tidyverse
library(tidyverse)
df2 %>%
group_by(Group) %>%
summarise(val = list(reduce(df1[Name], `+`))) %>%
mutate(Name = list(df1$Name)) %>%
unnest %>%
spread(Group, val)
# A tibble: 3 x 3
# Name A B
# <chr> <int> <int>
#1 apple 10 15
#2 banana 4 8
#3 pear 18 3
данными
df1 <- structure(list(Name = c("banana", "apple", "pear"), A1 = 1:3,
A2 = c(2L, 0L, 8L), A3 = c(1L, 8L, 7L), B1 = c(5L, 9L, 0L
), B2 = c(1L, 1L, 1L), B3 = c(2L, 5L, 2L)),
class = "data.frame", row.names = c(NA,
-3L))
df2 <- structure(list(Name = c("A1", "A2", "A3", "B1", "B2", "B3"),
Group = c("A", "A", "A", "B", "B", "B")),
class = "data.frame", row.names = c(NA,
-6L))