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

如何修正R代码实现读取加密Excel文件并合并为单个DataFrame?

问题解决代码

原代码的问题

  • 函数processFile里错误使用全局变量files而非传入的参数f,导致每次调用都读取全部12个文件,最终得到24个元素(12个文件×2列)的列表。
  • sapply会自动简化结果结构,不适合保留数据框格式。

修正后的代码方案

方案1:基础R实现

processFile <- function(f) {
  # 用传入的单个文件路径f读取,而非全局变量files
  df <- xl.read.file(f, password = "IIV628")
  # 返回筛选后的两列数据框
  df[, c(2, 15)]
}

# 用lapply获取数据框列表,避免sapply的自动简化
df_list <- lapply(files, processFile)
# 合并所有数据框为单个DataFrame
result <- do.call(rbind, df_list)

方案2:dplyr简洁实现

如果已安装dplyr包,用bind_rows合并更高效:

library(dplyr)

processFile <- function(f) {
  df <- xl.read.file(f, password = "IIV628")
  df[, c(2, 15)]
}

df_list <- lapply(files, processFile)
result <- bind_rows(df_list)

方案3:data.table大数据场景优化

处理大文件时推荐用data.table,速度更快:

library(data.table)

processFile <- function(f) {
  df <- xl.read.file(f, password = "IIV628")
  as.data.table(df[, c(2, 15)])
}

df_list <- lapply(files, processFile)
result <- rbindlist(df_list)

额外提示

  • 确保files是正确的文件路径向量,可通过files <- list.files(path = "你的目标目录", pattern = "\\.xlsx$", full.names = TRUE)生成。
  • 若不同文件的列名不一致,合并时会自动补NA,可在processFile里统一列名,比如colnames(df) <- c("列名1", "列名2")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:05:07