You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中如何用lapply处理txt文件并将数据框批量保存为txt到新文件夹

问题核心错误说明
  • file.copy是磁盘文件复制函数,无法直接将内存中的数据框列表写入为本地txt文件,这是代码未达预期的核心原因
  • 原新文件名生成逻辑仅按序号命名,无法保留原有文件名
  • morph函数中嵌套ifelse的空值处理逻辑位置错误,会导致值替换异常
修正后可运行代码
# 加载依赖包(mutate函数来自dplyr,未安装需先执行install.packages("dplyr"))
library(dplyr)

# 第一步:获取原文件路径,提取原文件名生成对应新文件路径
old.files <- list.files(path="/Users/F/folder/", pattern="*.txt", full.names=TRUE, recursive=FALSE)
# 提取原文件的基础文件名(不含路径)
old.filenames <- basename(old.files)
# 生成新文件路径,保留原文件名,前缀可根据需求自定义
new.files <- file.path("/Users/F/folder2/", paste0("New_Profile_", old.filenames))

# 第二步:修正morph函数的转换逻辑
morph <- function (x){
  tx0  <- read.table(x, row.names = NULL, col.names= c("Time","Stage"), skip=7, stringsAsFactors = F)
  # 单独处理Stage列为空的情况
  tx0$Stage[tx0$Stage == ""] <- tx0$Time[tx0$Stage == ""]
  # 用case_when替代多层嵌套ifelse,逻辑更清晰不易出错
  tx0$Stage <- case_when(
    tx0$Stage %in% c("Wach", "Bewegung", "A") ~ "0",
    tx0$Stage == "N1" ~ "2",
    tx0$Stage == "N2" ~ "1",
    tx0$Stage == "N3" ~ "3",
    tx0$Stage == "N4" ~ "4",
    tx0$Stage == "Rem" ~ "5",
    # 未匹配的取值保留原值
    TRUE ~ tx0$Stage
  )
  # 新增Epoch列
  tx0 <- mutate(tx0, Epoch=1:n())
  return(tx0)
}

# 第三步:批量处理并写入新文件夹
mapply(function(old_path, new_path) {
  processed_df <- morph(old_path)
  # 写入txt文件,可根据需要调整分隔符、是否保留列名等参数
  write.table(processed_df, new_path, row.names = FALSE, quote = FALSE, sep = "\t")
}, old.files, new.files)

# 若需要先保存所有处理后的数据框再批量写入,可使用下面的代码:
# files.list <- lapply(old.files, morph)
# for(i in seq_along(files.list)) {
#   write.table(files.list[[i]], new.files[i], row.names = FALSE, quote = FALSE, sep = "\t")
# }
可选调整说明
  • 不需要新文件名加New_Profile_前缀的话,直接删除paste0里的前缀内容即可
  • write.table的sep参数可自定义分隔符,默认是空格,设置sep=","可输出csv格式
  • 如果不需要保留列名,给write.table增加参数col.names = FALSE即可

内容的提问来源于stack exchange,提问作者Slevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:36:03