Как скопировать процедуру сводной таблицы из Excel в R? - PullRequest
0 голосов
/ 24 марта 2020

У меня есть набор данных с тремя столбцами. Я хотел бы «сгруппировать» по «местоположению» моего второго столбца с левой стороны. Представьте себе Нью-Йорк, Лондон, Берлин и все города, расположенные в левой колонке.

Я бы хотел "сгруппировать" по третьей колонке, которая называется "раса", но как новые колонки

Location | White| Black |Asian|Grand Total
New York   700   465     323   1,488
London     1000  600     200   1,800

У меня есть этот код

Attempt<-table %>%
group_by(`Location`) %>%
summarise(n())

, но он дает мне этот результат

Location|Grand Total
New York 1,488
London   1,800

Сделать такой пример в Excel очень просто. Я хотел бы сделать это в R. Это просто подсчет того, сколько раз значения появляются в таблице.

1 Ответ

1 голос
/ 24 марта 2020

Исходя из вашего описания, возможно, это может быть то, что вы ищете.

Сначала 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")
)
...