Мы можем melt
данных в «длинном» формате, указав столбцы measure
с именами столбцов patterns
как «Магазин», «Клиенты», а затем сгруппированные по «Магазину» получить sum
из ' Клиенты
library(data.table)
melt(setDT(df1), measure = patterns("^Shop", "^Clients"),
value.name = c("Shop", "Clients"))[, .(Clients = sum(Clients)), by = Shop]
# Shop Clients
#1: A 18
#2: B 10
#3: C 7
#4: D 10
#5: F 3
#6: R 4
Или используя tidyverse
library(tidyverse)
map_dfc(list(Shop = "Shop", Clients = "Clients"), ~
df1 %>%
select(matches(.x)) %>%
unlist) %>%
group_by(Shop) %>%
summarise(Clients = sum(Clients))
# A tibble: 6 x 2
# Shop Clients
# <chr> <int>
#1 A 18
#2 B 10
#3 C 7
#4 D 10
#5 F 3
#6 R 4
Или с rowsum
из base R
i1 <- grepl("^Shop", names(df1))
rowsum(unlist(df1[!i1]), group = unlist(df1[i1]))
данные
df1 <- structure(list(Shop = c("A", "B", "C", "D"), Clients = c(9L,
7L, 4L, 2L), Shop.1 = c("D", "A", "F", "B"), Clients.1 = c(8L,
4L, 3L, 1L), Shop.2 = c("A", "R", "C", "B"), Clients.2 = 5:2),
class = "data.frame", row.names = c(NA, -4L))