Как построить топ 5 наиболее часто встречающихся переменных по регионам в R - PullRequest
0 голосов
/ 20 ноября 2019

Я собираюсь составить сюжет, чтобы посмотреть на наиболее распространенный встречающийся FINAL_CALL_TYPE в моем наборе данных BOROUGH в Нью-Йорке. У меня есть набор данных с более чем 3 миллионами наблюдений. Я разбил это на образец 2000 года, но усовершенствовал его еще больше, чтобы он соответствовал только типу инцидента и району, в котором он произошел.

По сути, я хочу создать сюжет, который будет визуализироваться в 5 наиболее распространенных случаях. типы вызовов в каждом районе с подсчетом количества типов вызовов в каждом районе.

Ниже приводится краткий обзор того, как выглядят мои данные только с типом звонка и городом

> head(df)
        FINAL_CALL_TYPE   BOROUGH
1804978          INJURY     BRONX
1613888          INJMAJ  BROOKLYN
294874           INJURY  BROOKLYN
1028374            DRUG  BROOKLYN
1974030          INJURY MANHATTAN
795815             CVAC     BRONX

Это показывает, сколько уникальных значений существует

> str(df)
'data.frame':   2000 obs. of  2 variables:
 $ FINAL_CALL_TYPE: Factor w/ 139 levels "ABDPFC","ABDPFT",..: 50 48 50 34 50 25 17 138 28 28 ...
 $ BOROUGH        : Factor w/ 5 levels "BRONX","BROOKLYN",..: 1 2 2 2 3 1 4 2 4 4 ...

Это код, который я пробовал

> ggplot(df, aes(x=BOROUGH, y=FINAL_CALL_TYPE)) +
+     geom_bar(stat = 'identity') +
+     facet_grid(~BOROUGH) 

и ниже - результат R Plot - Call type by borough

Я попробовал несколько предложений в этом сообществе, но я не нашел ни одного, который показал бы, как выполнить действие с 2 столбцами.

Было бы очень признательно, если есть кто-то, кто знает решение дляэто.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 ноября 2019

Если я правильно понимаю, вы можете использовать tidyverse, чтобы сделать что-то вроде:

df <- df %>%
    group_by(BOROUGH, FINAL_CALL) %>%
    summarise(count = n()) %>%
    top_n(n = 5, wt = count)

затем сюжет

ggplot(df, aes(x = FINAL_CALL, y = count) +
    geom_col() +
    facet(~BOROUGH, scales = "free")
2 голосов
/ 20 ноября 2019

создание барплота

Первая часть вашей проблемы - создать барплот. С geom_bar вам нужно только указать переменную x, поскольку ось y - это количество наблюдений этой переменной. Затем можно использовать параметр фасета, чтобы разделить этот счетчик на разные панели для другой переменной группировки.

library(ggplot2)

ggplot(data = diamonds, aes(x = color)) +
  geom_bar() +
  facet_grid(.~cut)

фильтрация по 5 лучшим наблюдениям

Вторая часть вашей проблемы, ограничение данных только пятью лучшими в каждой группе, немного сложнее. Простой способ сделать это - сначала tally данные, которые создадут столбец n, который имеет количество наблюдений. Добавив опцию сортировки, мы можем filter данные в первые пять строк в каждой группе. tally, как и summarize, автоматически удаляет последнюю группу.

В вызове ggplot я теперь использую geom_col вместо geom_bar, и я явно указываю, что переменная y равна n (n создается tally).

geom_bar отображает количество наблюдений для каждой переменной x, geom_col отображает значение переменной y для каждого значения переменной x.

scales = "free_x" удаляет значения с оси X, которые присутствуют на одной панели вырезания, но не на другой.

library(tidyverse)

df <- diamonds %>% 
  group_by(cut, color) %>% 
  tally(sort = TRUE) %>% 
  filter(row_number() <= 5)

ggplot(data = df, aes(x = color, y = n)) +
  geom_col() +
  facet_grid(.~cut, scales = "free_x")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...