Функция для группировки и сюжета?- Р - PullRequest
1 голос
/ 22 марта 2019

Я новичок в R и прохожу курс R из DataQuest.У меня есть CSV лесных пожаров.Файл можно скачать здесь:

https://archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/

Я хочу создать функцию, которая группирует данные по «х» (например, месяц или день) и возвращает гистограммуcount.

library(readr)
library(dplyr)
library(ggplot2)

forestFires <- read_csv("forestfires.csv")

forestFiresCountPlot <- function(x) {
  forestFiresGroup <- forestFires %>%
  group_by(x) %>% 
  summarise(n(x)) %>%
  ggplot(data = forestFiresGroup) + 
    aes(x = x, y = n(x)) +
    geom_bar()
}

forestFiresMonth <- forestFiresCountPlot(month)
forestFiresDay <- forestFiresCountPlot(day)

# Output - Error: Column `x` is unknown

Когда я вызываю функцию, как мне указать, что месяц и день являются столбцами?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы можете попробовать что-то вроде этого:

forestFiresCountPlot <- function(x) {

  forestFires %>%  
    group_by_at(x) %>% 
    summarize(n = n()) %>%
    ggplot() + 
      aes_string(x = x, y = “n”) +
      geom_bar(stat = "identity")
}

forestFiresCountPlot("month")
forestFiresCountPlot("day")
1 голос
/ 22 марта 2019

Добро пожаловать в мир программирования с dplyr / ggplot2 / tidyverse.Вы можете узнать больше о деталях здесь , но следующее поможет вам:

library(tidyverse)

df <- read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/forest-fires/forestfires.csv")

plot_group <- function(df, grp) {
  grp_var <- enquo(grp)
  df %>%
    count(!! grp_var) %>%
    ggplot(aes(x = !!grp_var, y = n)) +
    geom_col()
}

plot_group(df, month)
plot_group(df, day)

Примечание. Возможно, вы захотите перебрать month и dayСначала переменные, поэтому они располагаются в более ожидаемом порядке:

df <- df %>%
  mutate(
    month = fct_relevel(month, str_to_lower(month.abb)),
    day = fct_relevel(day, c("sun", "mon", "tue", "wed", "thu", "fri", "sat"))
  )
...