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

#r #dplyr #pivot-table

Вопрос:

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

 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?

Ответ №1:

С dplyr помощью другого варианта можно указать переменные в across

 library(dplyr)
RegionSales %>%
    group_by(Region, Gender) %>%
    summarise(across(c(Age, AmountSold),
             ~ mean(., na.rm = TRUE), .names = "mean_{.col}"))
 

Комментарии:

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

2.@Muli это просто, просто сделайте summarise(across(c(Age, AmountSold), list(mean = ~ mean(., na.rm = TRUE), median = ~ median(., na.rm = TRUE), min = ~ min(., na.rm = TRUE), max = ~ max(., na.rm = TRUE))) range это на самом деле мин/макс

Ответ №2:

Это был бы мой подход к 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))
 

Комментарии:

1. Я пытаюсь воспроизвести это с помощью фрейма данных, аналогичного структуре, но в сводной статистике я получаю значения NA вместо значений, связанных с показателями центральной тенденции. В чем может быть проблема? Мой DF имеет значения NA

Ответ №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