【问题标题】:Create folders with csv files in R from a dataframe从数据框在 R 中创建包含 csv 文件的文件夹
【发布时间】:2020-02-05 10:06:03
【问题描述】:

我有一个包含多个变量的 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

我想根据“区域”变量的模式创建几个文件夹,其中根据“crop”变量的模式创建几个.csv文件 获取图片中的文件夹regions folders

每个文件夹内都有作物文件,如图片crops files

总而言之,我想通过按地区裁剪来获取数据。 我可以使用库“tidyverse”按裁剪或按区域获取数据,但是如果您能帮助我并提前感谢您,我将无法合并两个“每个区域文件夹的裁剪文件”。

【问题讨论】:

    标签: r dataframe tidyverse


    【解决方案1】:

    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.循环遍历 Region 和 Crop 的 unique 值,提取各个文件的数据并将它们写入磁盘。

    # 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)
      }
    }
    

    【讨论】:

    • 非常感谢,这正是我想要的,祝你有美好的一天;-)
    【解决方案2】:

    遍历行,如果文件夹不存在则创建文件夹,然后将文件写出:

    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)
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 2018-05-09
      • 2011-12-25
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      相关资源
      最近更新 更多