Как создать СПИСОК наборов данных и графиков и экспортировать их? - PullRequest
0 голосов
/ 01 мая 2018

Вот набор данных:

# dataset call DT
DT <- data.table(
Store = rep(c("store_A","store_B","store_C","store_D","store_E"),4),
Amount = sample(1000,20))

У меня есть ДВА целей, которых нужно достичь:

  • 1.Generate НЕЗАВИСИМЫЙ Сгруппированный набор данных для экспорта EXCEL.CSV файлов.
  • 2. Генерировать НЕЗАВИСИМЫЙ График для экспорта PNG файлов.

* Нет необходимости запускать оба в одной операции.

Ограничения: Я могу выполнять их только с ONE по ONE базовой операцией, такой как:

# For dataset & CSV export
store_A <- DT %>% group_by(Store) %>% summarise(Total = sum(Amount))

fwrite(store_A,"PATH/store_A.csv")

store_B <- DT %>% group_by(Store) %>% summarise(Total = sum(Amount))

fwrite(store_B,"PATH/store_A.csv")
.....
# For graph :

Plt_A <- ggplot(store_A,aes(x = Store, y = Total)) + geom_point()

ggsave("PATH/Plt_A.png")

Plt_B <- ggplot(store_B,aes(x = Store, y = Total)) + geom_point()

ggsave("PATH/Plt_B.png")
.....

* Подходы, написанные для циклов for, могут быть найдены, но путаница, которая более эффективен и РАБОТАЕТ в генерации графа, для петель В.С. Поскольку реальный набор данных имеет для генерации более 2 миллионов строк по 70 столбцов и групп по 10 000 , для циклов может быть ужасно медленный запуск и аварийное завершение R. Узкое место в реальном наборе данных содержит 10 тыс. Групп «Store»

1 Ответ

0 голосов
/ 01 мая 2018

Поскольку все должно быть в цикле:

require(tidyverse)
require(data.table)

setwd("Your working directory")

# dataset call DT
DT <- data.table(
  Store = rep(c("store_A","store_B","store_C","store_D","store_E"),4),
  Amount = sample(1000,20)) %>% 
  #Arrange by store and amount
  arrange(Store, Amount) %>% 
  #Nesting by store, thus the loop counter/index will go by store
  nest(-Store)

#Export CSVs by store
i <- 1
for (i in 1:nrow(DT)) {
    write.csv(DT$data[i], paste(DT$Store[i], "csv", sep = "."))
  }

#Export Graphs by store
i <- 1
for (i in 1:nrow(DT)) {
  Graph <- DT$data[i] %>% 
    as.data.frame() %>%
    ggplot(aes(Amount)) + geom_histogram()

  ggsave(Graph, file = paste0(DT$Store[i],".png"), width = 14, height = 10, units = "cm")

}
...