【问题标题】:Reading EDF header读取 EDF 标头
【发布时间】:2020-09-14 21:30:36
【问题描述】:

我有 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 文件执行此操作可能会有点累...

【问题讨论】:

    标签: r matlab eeglab european-data-format


    【解决方案1】:

    如果没有可重现的示例,很难回答,但我建议循环遍历您的文件,尽管可能有一种更优雅的方法可以通过应用将所有这些功能化为更少的行。如果它们都在同一个目录中,这应该可以通过以下方式实现:

    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
    

    【讨论】:

    • pattern = "*.edf 中缺少一个 "
    • 是的,错过了。我更新了希望现在可以使用的答案。
    【解决方案2】:

    您可以使用lapplyreadEdfHeader 在一个代码行中获取所有标题。

    首先,一个使用包数据集的工作示例。

    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)
    

    【讨论】:

    • 谢谢。我必须做的唯一修改是将“recordDuration”更改为“recordedPeriod”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2013-11-15
    相关资源
    最近更新 更多