#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