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

如何用R从189个文件各提取1列并创建新数据框?

解决R循环读取多文件并合并指定列的问题

你的代码核心问题是每次循环都用新文件的列覆盖了变量E,导致最终只保留最后一个文件的结果,另外还有一行逻辑错误的无用代码。下面是修正后的方案:

修正后的循环写法

number <- 189
cnt <- 5
# 预先初始化空数据框用于存储结果
E <- data.frame()

for(i in 1:number){
  cnt <- cnt + 1
  print(i)
  # 直接读取目标列,无需加载整个文件后再筛选
  target_col <- fread(paste0("Trait", cnt, ".SOL"), 
                      colClasses = "character",
                      select = 8)  # 指定仅读取第8列,提升效率
  # 给列命名以区分不同文件
  colnames(target_col) <- paste0("Trait", cnt)
  # 将新列合并到结果数据框中
  E <- cbind(E, target_col)
}

更高效的批量处理写法(推荐)

R中用lapply批量处理文件比for循环更简洁高效:

# 生成所有需要读取的文件名(对应Trait6.SOL到Trait194.SOL)
file_list <- paste0("Trait", 6:(5+189), ".SOL")

# 批量读取每个文件的第8列
collections <- lapply(file_list, function(f) {
  fread(f, colClasses = "character", select = 8)
})

# 将所有列合并为一个数据框
E <- do.call(cbind, collections)
# 给数据框的列设置有意义的名称
colnames(E) <- gsub("\\.SOL", "", file_list)

关键说明

  1. 原代码中row<-which(dfn==nrow(dfn))逻辑错误且未被使用,直接删除即可
  2. 使用fread的select参数可以只读取需要的列,避免加载整个文件,大幅提升速度
  3. 确保所有文件的行数一致,否则cbind会报错;如果行数不一致,需要先统一行数或处理缺失值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:35:23