我有100+脑电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文件这么做可能会有点烦人.
发布于 2020-05-27 19:34:13
您可以使用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)发布于 2020-05-27 19:16:23
如果没有一个可重复的示例,很难回答,但我建议循环查看您的文件,尽管可能有一种更优雅的方法,可以将所有这些功能转换为更少的行,并使用应用程序。如果它们都在同一个目录中,那么在以下情况下应该是可能的:
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 helpfulhttps://stackoverflow.com/questions/62049927
复制相似问题