Чтение заголовка EDF - PullRequest
       105

Чтение заголовка EDF

0 голосов
/ 27 мая 2020

У меня более 100 файлов EEG EDF. Я хочу извлечь время и дату начала вместе с продолжительностью записи во фрейм данных. Есть ли простой способ извлечь эти данные? Предпочтительно в R или Matlab.

Я успешно извлек данные, используя:

library(edfReader)
CHdr <-  readEdfHeader("E:/data/EDF/Rtest/EEG1 (2).edf")
summary(CHdr)

format (CHdr$startTime, format="%Y-%m-%d %H:%M:%S",  usetz = FALSE)
CHdr$recordedPeriod

Но делать это для 100+ файлов EDF может быть немного утомительно ...

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Вы можете использовать lapply с readEdfHeader, чтобы получить все заголовки в одной строке кода.

Сначала рабочий пример с наборами данных пакета.

old_dir <- getwd()
libDir <- system.file("extdata", package = 'edfReader')
setwd(libDir)

Получите .edf имена файлов и прочтите их заголовки.

fls <- list.files(pattern = '\\.edf')
edf_headers <- lapply(fls, readEdfHeader)

Затем извлеките соответствующая информация и rbind это для создания data.frame.

res <- lapply(edf_headers, function(x){
  startTime <- x[['startTime']]
  startDate <- substr(x[['recordingId']], 11, 21)
  recordDuration <- x[['recordDuration']]
  data.frame(startTime, startDate, recordDuration)
})
res <- do.call(rbind, res)
res
#            startTime   startDate recordDuration
#1 2000-01-01 14:15:16 01-JAN-2000            0.1
#2 2009-12-10 12:44:02 10-DEC-2009            1.0
#3 2009-12-10 12:44:02 10-DEC-2009            1.0

Сброс рабочего каталога.

setwd(old_dir)
0 голосов
/ 27 мая 2020

Трудно ответить без воспроизводимого примера, но я бы посоветовал перебрать ваши файлы в цикле, хотя может быть более элегантный способ реализовать все это в меньшем количестве строк с помощью приложения. Если все они находятся в одном каталоге, это должно быть возможно с помощью следующего:

library(edfReader)    
files <- list.files("E:/data/EDF/Rtest/", pattern = "*.edf")
outputs <- list()

for (i in 1:length(files)) {

i_file <- paste0("E:/data/EDF/Rtest/",files[i])
i_CHdr <-  readEdfHeader(i_file)

#whatever else you are doing

outputs[[i]] <- output_from_your_code
rm(i_file, i_CHdr) #plus whatever objects your code has

}

#work with outputs list as necessary; dplyr::bind_rows is often helpful
...