Использование ldply
(пакет "plyr") для импорта нескольких файлов CSV из папки: заголовок веры, и как это сделать для нескольких папок?
настроено:
- Рабочий стол: MacBook Pro (начало 2011 г.) с iOS 10.13.6
- Версия программного обеспечения: версия 3.5.1 R (2018-07-02) - "Спрей для перьев"
- R studio: Версия 1.1.456
Я хотел бы импортировать несколько CSV-файлов из определенных папок и объединить их в один файл с 5 столбцами: Переменная1 / Переменная2 / имя_файла / эксперимент_nb / pulse_nb
Мне удалось сделать импорт всех файлов из одной и той же папки из предыдущих аналогичных вопросов в StackOverflow в одном и том же data.frame, однако я не уверен, как это сделать для другой папки и достоверности заголовка каждого файла после объединить. Поскольку файл слишком велик, чтобы обрабатывать его вручную (200 000 строк на файлы), я хочу убедиться, что нет ошибок, которые могли бы привести к сбою в последующем анализе, например, к строке заголовка перед данными каждого файла CSV. импортировано
CSV выглядит так: «20190409-0001_002.csv» с датой, за которой следует название эксперимента (0001) в примере и номер импульса (002)
#setting package and directory
library(plyr)
library(stringr)
setwd("/Users/macbook/Desktop/Project_Folder/File_folder1")
#Creating a list of all the filenames:
filenames <- list.files(path = "/Users/macbook/Desktop/Project_Folder/File_folder1")
#creating a function to read csv and in the same time adding an additional column with the name of the file
read_csv_filename <- function(filename)
{
ret <- read.csv(filename, header=TRUE, sep=",")
ret$Source <- filename #EDIT
ret
}
#importing
import <- ldply(filenames, read_csv_filename)
#making a copy of import
data<-import
#modifying the file name so it removes ".csv" and change the header
data$Source<-str_sub(data$Source, end=-5)
data[1,3]<-"date_expnb_pulsenb"
t<-substr(data[1,3],1,3)
head(data, n=10)
#create a column with the experiment number, extracted from the file name
data$expnb<-substr(data$Source, 10, 13)
data$expnb<-as.numeric(data$expnb)
head(data, n=10)
tail(data, n=10)
1 ° Теперь мне нужно импортировать все остальные папки в те же файлы, что я мог бы в конечном итоге сделать вручную, потому что количество папок можно выполнить вручную (9-10), но я подумываю сделать код для этого а также для будущих экспериментов с большим количеством экспериментов. Как это сделать ? сначала перечислить все папки, затем перечислить все файлы из этой папки, а затем перегруппировать их в один список файлов? Это выполнимо с list.files?
Название папки будет выглядеть так: «20190409-0001»
2 ° Результат из кода выше (head (data, n = 10)) выглядит следующим образом:
> head(data, n=10)
Time Channel.A Source pulsenb expnb
1 (us) (A) expnb_pulsenb NA NA
2 -20.00200030 -0.29219970 20190409-0001_002 2 1
3 -20.00100030 -0.29219970 20190409-0001_002 2 1
и
> tail(data, n=10)
Time Channel.A Source pulsenb expnb
20800511 179.99199405 -0.81815930 20190409-0001_105 105 1
20800512 179.99299405 -0.81815930 20190409-0001_105 105 1
Я хотел бы провести обширный анализ данных в большом списке, и мне интересно, как проверить, что в середине из них нет строки с заголовками файлов. Как заголовки, такие же, как в файле csv, функция ldply уже учитывает заголовки? Будет ли весь заголовок файла находиться в отдельной строке во фрейме данных импорта? Как это проверить? (к сожалению, в каждом файле около 200 строк XXX, поэтому я не могу вручную проверить заголовки).
Надеюсь, я добавил все необходимые данные и разместил вопросы в правильном формате, так как я впервые публикую здесь :)
Заранее спасибо, ребята, за помощь!