首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用"for循环“来写多个.csv文件名?

如何使用"for循环“来写多个.csv文件名?
EN

Stack Overflow用户
提问于 2019-03-05 02:39:34
回答 2查看 945关注 0票数 0

有没有人知道执行"for循环“的最好方法,这个循环会读取不同的主题id,并将它们附加到导出的csv的名称中?

举个例子,我有一个心电图软件程序的多个输出文件(每个文件属于一个人)。这些文件被命名为C800_HR.bdf.evt、C801_HR.bdf.evt、C802_HR.bdf.evt等。每个文件都被读取到r中,然后应用一个脚本来计算心率变异性。在脚本的末尾,我需要添加一个循环来提取主题id (例如,C800、C801、C802),并为每个对象写一个新的文件名,这样它就变成了C800_RtoR.csv。从本质上讲,我希望避免每次读入和导出文件名时都更改语法。

我目前正在使用以下语法来读入多个文件:

代码语言:javascript
运行
复制
>setwd("/Users/kmpc/Downloads")
>myhrvdata <-lapply(Sys.glob("C8**_HR.bdf.evt"), read.delim)
EN

回答 2

Stack Overflow用户

发布于 2019-03-05 03:04:23

试试这个:

代码语言:javascript
运行
复制
cardio_files <- list.files(pattern = "C8\\d{2}_HR.bdf.evt")
subject_ids <- sub("^(C8\\d{2})_.*", "\\1" cardio_files)

myList <- lapply(cardio_files, read.delim)


## do calculations on the list

for (i in names(myList)) {

  write.csv(myList[[i]], paste0(subject_ids[i], "_RtoR.csv"))

}

唯一的问题是,在进行计算时,您必须使用列表。您可以将它们组合到单个data.frame中,但最好将其保留为一个列表,以便在最后写入这些文件。

票数 0
EN

Stack Overflow用户

发布于 2019-03-05 03:59:13

考虑通过创建一个函数来泛化您的过程: 1)读取文件,2)处理数据,3)输出到csv。然后,让lapply在所有Sys.glob项上迭代调用已定义的方法,甚至返回计算出的数据帧列表。

代码语言:javascript
运行
复制
proc_heart_rate <- function(f_name) {
   # READ IN .evt FILE INTO df
   df <- read.delim(f_name)

   # CALCULATE HEART RATE VARIABILITY WITH df
   ...

   # OUTPUT df TO CSV
   subject_id <- gsub("\\_.*", "", f_name)
   write.csv(df, paste0(subject_id, "_RtoR.csv"))

   # RETURN df FOR OTHER USES
   return(df)
}

# LIST OF DATA FRAMES WITH CALCULATIONS
myhrvdata_list <-lapply(Sys.glob("C8**_HR.bdf.evt"), proc_heart_rate)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54989529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档