Как написать функцию в r, которая отображает данные для каждого уникального значения? - PullRequest
0 голосов
/ 13 февраля 2020

Основываясь на данных о преступности в Ванкувере, я пытаюсь написать функцию, которая отображает количество преступлений на район по всем видам преступлений.

Ниже приведено то, что я сделал до сих пор:

all_type <- unique(crime$TYPE)

plot_all <- function(x) {

  m <- filter(crime, YEAR %in% c(2003, 2019), TYPE == x) %>%
  ggplot(aes(x= fct_rev(fct_infreq(NEIGHBOURHOOD))))+
  geom_bar(stat = "count")+
  coord_flip()+
  ggtitle(paste("Crime type:", x, sep=" "))+
  labs(x=" ", y="Total incidents, 2003-2019")

  for (i in seq_along(x)){
    result <- {print(m)}
  }
return(result)

}

plot_all(all_type)

Но при этом возвращается только сюжет для первого из перечисленных видов преступлений, а не отдельные участки для каждого вида преступлений.

1 Ответ

2 голосов
/ 13 февраля 2020

Есть некоторые проблемы с функцией, как опубликовано. В приведенном ниже коде я отделю проблему построения одного графика от задачи построения всех графиков. Каждой из этих проблем будет соответствовать функция.

Прежде всего, данные, которые я использую, могут быть загружены с помощью следующих инструкций, которые можно найти в RPubs по RStudio:

Данные о преступности из полицейского управления Ванкувера от Ara sh Тавассоли (2018-11-05)

url <- "ftp://webftp.vancouver.ca/opendata/csv/crime_csv_all_years.zip"
temp <- tempfile()
download.file(url, temp)
crime <- read.csv(unz(temp, "crime_csv_all_years.csv"))
unlink(temp)

Теперь графический код.

library(dplyr)
library(tidyr)
library(forcats)
library(ggplot2)

plot_one <- function(x, crime) {
  m <- filter(crime, YEAR %in% c(2003, 2019), TYPE == x) %>%
    ggplot(aes(x = fct_rev(fct_infreq(NEIGHBOURHOOD)))) +
    geom_bar(stat = "count") +
    coord_flip() +
    ggtitle(paste("Crime type:", x, sep=" ")) +
    labs(x = " ", y = "Total incidents, 2003-2019")
  m
}

plot_all <- function(crimedata){
  all_type <- unique(crimedata[["TYPE"]])
  g_list <- lapply(all_type, plot_one, crime = crimedata)
  lapply(g_list, print)
  g_list
}

g_all <- plot_all(crime)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...