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

如何在R语言函数中将多个导入文件合并为单个数据框?

解决方法

你的代码当前存在两个问题:每次处理文件都会覆盖输出的means.csv,且没有保留每个文件对应的物种标识。要将所有处理结果合并为单个DataFrame,最优方案是让函数返回处理后的结果,给每个结果添加物种编号,再批量合并。

修改后的完整代码

# 导入所有CSV文件到列表
temp = list.files(pattern="*.csv")
myfiles = lapply(temp, read.csv)

# 定义处理函数:返回带物种编号的处理结果
fn <- function(i) {
  data = myfiles[[i]]
  
  # 拆分存活与死亡样本
  dataDead <- subset(data, YValues==1)
  dataAlive <- subset(data, YValues==0)
  
  # 按国家计算死亡样本的平均预测概率
  meanDead <- aggregate(dataDead$MortPredicted, list(dataDead$Country), FUN=mean)
  meanDead <- meanDead %>% rename(meanDead = x, country = Group.1)
  
  # 按国家计算存活样本的平均预测概率
  meanAlive <- aggregate(dataAlive$MortPredicted, list(dataAlive$Country), FUN=mean) 
  meanAlive <- meanAlive %>% rename(meanAlive = x, country = Group.1)
  
  # 合并两类均值,添加物种编号列
  means <- merge(meanDead, meanAlive, by = "country", all = TRUE)
  means$species <- i  # 标记当前结果对应第i个物种的文件
  
  return(means)
}

# 批量处理所有文件,得到结果列表
processed_results <- lapply(1:length(myfiles), fn)

# 将列表合并为单个DataFrame
# 方案1:使用dplyr(推荐,兼容列不一致的情况)
combined_df <- dplyr::bind_rows(processed_results)

# 方案2:使用Base R(仅当所有子DataFrame列完全一致时适用)
# combined_df <- do.call(rbind, processed_results)

# 导出合并后的最终结果
write.csv(combined_df, "combined_species_means.csv", row.names = FALSE)

核心改动说明

  • 函数返回结果而非直接写文件:避免每次处理覆盖输出文件,同时保留所有中间结果用于合并
  • 添加物种标识列:通过means$species <- i标记当前结果对应的物种文件序号,方便后续区分不同物种的数据
  • 批量合并列表:用bind_rows(或Base R的do.call(rbind, ...))将所有子DataFrame合并为一个大表,bind_rows更灵活,能处理子表列不完全一致的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:17:18