объединить наборы данных в 1 CSV-файл с назначить подпапку в R - PullRequest
0 голосов
/ 09 октября 2018

У меня есть папка с множеством наборов данных

C:/path/folder

В папке есть подпапки

/1
/2
/3
...

В каждой подпапке есть 1-20 файлов CSV.

Так что мне нужны все CSVиз подпапок папки объединяются в один CSV-файл, но каждое наблюдение должно иметь отметку из какой подпапки.

Пример, если я объединяю CSV-файлы из подпапки 1 и 2, я получаю

newdata=structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "02.01.2018", class = "factor"), 
    Revenue = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Budget = c(6.25, 6.25, 5.92, 
    6.25, 5.92, 6.25, 5.92, 5.92, 5.92, 6.25, 6.25, 6.25, 5.92, 
    6.25, 6.25, 5.92, 5.92, 5.92, 6.25, 5.92)), .Names = c("Date", 
"Revenue", "Budget"), class = "data.frame", row.names = c(NA, 
-20L))

это немного неправильно, мне нужно назначить номера подпапок для наблюдений, по мере их поступления.Итак, выведите

Date    Revenue Budget  subfolder
02.01.2018  0   6,25    1
02.01.2018  0   6,25    1
02.01.2018  0   5,92    1
02.01.2018  0   6,25    1
02.01.2018  0   5,92    1
02.01.2018  0   6,25    1
02.01.2018  0   5,92    1
02.01.2018  0   5,92    1
02.01.2018  0   5,92    1
02.01.2018  0   6,25    1
02.01.2018  0   6,25    1
02.01.2018  0   6,25    1
02.01.2018  0   5,92    2
02.01.2018  0   6,25    2
02.01.2018  0   6,25    2
02.01.2018  0   5,92    2
02.01.2018  0   5,92    2
02.01.2018  0   5,92    2
02.01.2018  0   6,25    2
02.01.2018  0   5,92    2

, чтобы obs из 1:12 была взята в подпапку 1 и obs.с 13:20 было взято из подпапки 2

отдельная подпапка 1

C:/path/folder/subfolder1

f1=structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L), .Label = "02.01.2018", class = "factor"), Revenue = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Budget = c(6.25, 6.25, 
5.92, 6.25, 5.92, 6.25, 5.92, 5.92, 5.92, 6.25, 6.25)), .Names = c("Date", 
"Revenue", "Budget"), class = "data.frame", row.names = c(NA, 
-11L))

C:/path/folder/subfolder2

f2 =

structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = "02.01.2018", class = "factor"), Revenue = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), Budget = c(6.25, 5.92, 6.25, 
6.25, 5.92, 5.92, 5.92, 6.25, 5.92)), .Names = c("Date", "Revenue", 
"Budget"), class = "data.frame", row.names = c(NA, -9L))

1 Ответ

0 голосов
/ 09 октября 2018

Представьте, что у вас есть следующая структура папок:

master
 |
 +-- folder1
     | 
     +-- file1.csv
     +-- file2.csv
 +-- folder2
     |
     +-- file1.csv
     +-- file2.csv

, и ваш рабочий каталог - "главный", тогда вы можете сделать следующее:

# this filters out all non-files (directories) in master
dirs <- list.files()[!grepl("[.]", list.files())]

# This creates the dataframe that will be filled
all_data <- data.frame(Date = character(),
                       Revenue = integer(),
                       Budget = numeric(),
                       dirname = character())

# Loops over directories
for (dirname in dirs) {
  # Get all csv files
  all_csv <- list.files()[grepl(".csv", list.files())]

  # Loops over files in the directory
  for (file in all_csv) {
    tempdata <- read.table(file, stringsAsFactors = FALSE, header = TRUE)
    tempdata$dirname <- dirname
    all_data <- rbind(all_data, tempdata)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...