Создайте сводную таблицу двух категориальных и числовых переменных

2

У меня есть следующий гипотетический фреймворк

Region <- c("District A", "District B","District A","District A","District B")
Gender <- c("Male","Male","Female", "Male","Female")
Age <- c(20, 21, 23, 34, 22)
AmountSold <- c(50, 10, 20, 4, 12)
RegionSales <- data.frame(Region, Gender, Age, AmountSold)

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

Теги:
dplyr pivot-table
CodeFix

3 ответа

3
Лучший ответ

Это был бы мой подход кdplyr упаковка:

library(dplyr)

RegionSales %>%
  group_by(Region, Gender) %>%
  summarize(mean_age = mean(Age), mean_amount = mean(AmountSold))

Выход:

# A tibble: 4 x 4
# Groups:   Region [2]
  Region     Gender mean_age mean_amount
  <chr>      <chr>     <dbl>       <dbl>
1 District A Female       23          20
2 District A Male         27          27
3 District B Female       22          12
4 District B Male         21          10

Вариант, который игнорируетNA значения:

RegionSales %>%
  group_by(Region, Gender) %>%
  summarize(mean_age = mean(Age, na.rm = T),
            mean_amount = mean(AmountSold, na.rm = T))
Поделиться
Источник
4

Сdplyr , другой вариант - указать переменные вacross

library(dplyr)
RegionSales %>%
    group_by(Region, Gender) %>%
    summarise(across(c(Age, AmountSold),
             ~ mean(., na.rm = TRUE), .names = "mean_{.col}"))
Поделиться
Источник
3

Базовый вариант с использованиемaggregate мог бы помочь

> aggregate(. ~ Region + Gender, RegionSales, mean)
      Region Gender Age AmountSold
1 District A Female  23         20
2 District B Female  22         12
3 District A   Male  27         27
4 District B   Male  21         10
Поделиться
Источник
CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум