Создайте папки с CSV-файлами в R из кадра данных - PullRequest
1 голос
/ 05 февраля 2020

У меня есть CSV-файл с несколькими переменными, и каждая переменная имеет несколько модальностей, как показано ниже, например:

Region Crop Date Product
     a   aa aaa aaaa
     a   dd ddd ssss
     b   ss eee dddd
     b   cc fff ffff
     c   vv fff gggg
     c   gg ddd rrrr
     d   ff sss tttt
     d   rr ggg gggg

, и я хочу создать несколько папок в соответствии с модальностями «Регион» переменная с несколькими файлами .csv внутри в соответствии с модальностями переменной «crop», получающей папки, как на рисунке регионов, папок

и внутри каждой папки, имеющей файлы для кадрирования, как на рисунке культурные файлы

в итоге Я хочу получить данные по регионам. Я мог бы получить данные по культурам или регионам, используя библиотеку «tidyverse», но объединить два «файла культур для каждой папки региона» я не смогу, если вы поможете мне с этим и заранее поблагодарите.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

1. Сделайте воспроизводимые примеры данных

df <- data.frame(Region = c("a", "a", "b", "b", "c", "c"),
                 Crop = c("aa", "dd", "ss", "cc", "vv", "gg"),
                 Date = c("aaa", "ddd", "eee", "fff", "fff", "ddd"),
                 Product = c("aaaa", "ssss", "dddd", "ffff", "gggg", "rrrr"),
                 stringsAsFactors = FALSE)

2.L oop - unique для Region и Crop, извлеките данные для отдельных файлов и запишите их на диск.

# For each unique Region
#
for(r in unique(df$Region)) {

  # Extract region data
  #
  region_data <- df[df$Region %in% r, ]

  # For each unique Crop within this Region
  #
  for (c in unique(region_data$Crop)) {

    # Extract this region-crop data
    #
    region_crop_data <- region_data[region_data$Crop %in% c, ]

    # Create directory if necessary (would raise warning if directory already exists)
    #
    if (!dir.exists(r)) dir.create(r, recursive = TRUE)

    # Finally save region-crop data to csv
    #
    write.csv(region_crop_data, file.path(r, paste0(c, ".csv")), row.names = FALSE)
  }
}
0 голосов
/ 05 февраля 2020

L oop через строки, создайте папку, если она не существует, затем запишите файл:

for(i in seq(nrow(df))){

  myDir <- paste0(df$Region[ i ], "/")
  myCSV <- paste0(myDir, df$Crop[ i ], ".csv")

  if(!dir.exists(myDir)) dir.create(myDir)

  # do some stuff
  # myResult <- ...

  write.csv(myResult, myCSV)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...