阅读 EDF header
Reading EDF header
我有 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 文件执行此操作可能会有点累...
没有可重现的示例很难回答,但我建议循环遍历您的文件,尽管可能有一种更优雅的方法可以通过应用将所有这些功能化为更少的行。如果它们都在同一个目录中,这应该可以通过以下方式实现:
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
您可以将 lapply
与 readEdfHeader
结合使用,在一个代码行中获取所有 headers。
首先,一个包数据集的工作示例。
old_dir <- getwd()
libDir <- system.file("extdata", package = 'edfReader')
setwd(libDir)
获取 .edf
文件名并读取它们的 headers。
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)
我有 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 文件执行此操作可能会有点累...
没有可重现的示例很难回答,但我建议循环遍历您的文件,尽管可能有一种更优雅的方法可以通过应用将所有这些功能化为更少的行。如果它们都在同一个目录中,这应该可以通过以下方式实现:
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
您可以将 lapply
与 readEdfHeader
结合使用,在一个代码行中获取所有 headers。
首先,一个包数据集的工作示例。
old_dir <- getwd()
libDir <- system.file("extdata", package = 'edfReader')
setwd(libDir)
获取 .edf
文件名并读取它们的 headers。
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)