Исходя из вашего описания, возможно, это может быть то, что вы ищете.
Сначала group_by
оба Location
и Race
получат итоговые значения.
Затем вы можете использовать pivot_wider
, чтобы получить окончательную нужную таблицу в широкой форме.
Финальный rowSums
получит Grand_Total
(где -1 удаляет столбец Location
из расчета).
Я составил некоторые данные для иллюстрации.
library(tidyverse)
df %>%
group_by(Location, Race) %>%
summarise(Total = sum(n())) %>%
ungroup() %>%
pivot_wider(id_cols = Location, names_from = Race, values_from = Total, values_fn = list(Total = sum), values_fill = list(Total = 0)) %>%
mutate(Grand_Total = rowSums(.[,-1]))
Вывод
# A tibble: 3 x 5
Location Black Asian White Grand_Total
<fct> <int> <int> <int> <dbl>
1 Berlin 1 0 0 1
2 London 0 1 2 3
3 New York 1 0 1 2
Данные
df <- data.frame(
ID = 1:6,
Location = c("New York", "London", "Berlin", "London", "New York", "London"),
Race = c("White", "White", "Black", "Asian", "Black", "White")
)