L oop за год и сгруппированные по месяцам, вложенные в другое l oop с использованием R - PullRequest
0 голосов
/ 08 марта 2020

Фрейм данных выглядит следующим образом:

... year month country bincensored ...
    2017   4     JP        0
    2018   12    US        0
    2017   4     JP        1
    2019   6     LT        0
    2018   5     JP        1
    ...

Следующий код отображает Японию (сгруппированную по месяцам) в 2017 году; Я хотел бы сделать это для всех стран в 2017 году.

japan <- global %>%
         filter(country == "JP" & year == "2017") %>%
         group_by(month) %>%
         summarise(blocks = mean(bincensored))

japan$month <- as.numeric(japan$month)

k <- ggplot(data = japan, aes(x = month, y = blocks)) +
     geom_point() +
     geom_line()

k <- k + scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                            labels = c("Jan", "Feb", "Mar", "Apr", "May",
                                       "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Вы можете сделать это, но вам все равно придется вызывать отдельные графики для их просмотра

Global <- data.frame(country = rep(c("US","JP","LT"), each = 72), 
                     year = "2017", 
                     month = rep(c(1:12), 18),
                     bincensored = sample(c(0,1), 216, replace = T))

# I am grouping by year here because you have many years in your dataset
df <- Global %>% 
  group_by(country, year, month) %>% 
  summarize(blocks = mean(bincensored))

# Just to show how similar this is to what you have been doing, you'll need to filter by year for your dataset for individual country plotting by year, as you've done
    df %>% filter(country == "JP") %>% 
      ggplot(aes(x = month, y = blocks)) +
      geom_point() +
      geom_line() + 
      scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                         labels = c("Jan", "Feb", "Mar", "Apr", "May",
                                    "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))

pltlist <- list() # a list object to store you plots from loop

# You will need to filter df by year if you are plotting by year. Or alternatively can do that within a loop. 

for (i in unique(df$country)) {

  plt <- df %>% filter(country == i) %>% 
    ggplot(aes(x = month, y = blocks)) +
    geom_point() +
    geom_line() + 
    scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                       labels = c("Jan", "Feb", "Mar", "Apr", "May",
                                  "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
  pltlist[[i]] <- plt
  # ggsave(filename = paste0("plt", i,".png"), plt)
}

pltlist[["US"]]
pltlist[["JP"]]

Обратите внимание, что я сделал это только с использованием набора фиктивных данных, созданного на 2017 год. В вашем случае, если вы будете хочу фильтровать по году. Вы можете сохранить графики отдельно, раскомментировав компонент ggsave()

Включая год в пределах l oop, для создания графиков по годам

Это сделано из основной сводки по всем годам

   for (i in unique(df$country)) {
      for(y in unique(df$year)){
      plt <- df %>% filter(country == i, year == y) %>% 
        ggplot(aes(x = month, y = blocks)) +
        geom_point() +
        geom_line() + 
        scale_x_continuous(breaks = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                           labels = c("Jan", "Feb", "Mar", "Apr", "May",
                                      "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
      pltlist[[paste0(i,y)]] <- plt
      # ggsave(filename = paste0("plt", i, y,".png", sep = "_"), plt)}
    }
0 голосов
/ 08 марта 2020

Попробуйте это. Просто замените airquality вашими данными и измените переменные соответственно. Концепция такая же.

airquality
str(airquality)

airquality %>%
  # filter whatever you want here
  filter(Month==6) %>%
  ggplot(aes(x = Day, y = Temp)) +
  geom_point() +
  geom_line()

# Facetting
airquality %>%
  mutate(Month = month.abb[Month]) %>%
  ggplot(aes(x = Day, y = Temp)) +
  geom_point() +
  geom_line() -> p

p + facet_wrap(~Month)
p + facet_grid(~Month)
p + facet_grid(Month~.)

# One month per plot
for(month in unique(airquality$Month)) {
  airquality %>%
    filter(Month == month) %>%
    mutate(Month = month.abb[Month]) %>%
    ggplot(aes(x = Day, y = Temp)) +
    geom_point() +
    geom_line() +
    ggtitle(paste0("Month: ", month.name[month]))
  ggsave(file=paste("E:/SO/myRplot_", month.abb[month], ".png"))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...