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

如何使用R识别两个不同文件夹下文件的chr_pos列差异

R对比两个文件夹对应文件chr_pos列差异的实现方法

前置准备

  • 确认两个文件夹下的文件是一一对应关系,即匹配的文件名称完全一致,例如a文件夹下有sample1.csv,对应b文件夹下也有sample1.csv
  • 提前安装依赖包,没有安装的先运行命令:install.packages(c("tidyverse", "fs"))
    • tidyverse用于数据处理和通用文件读写
    • fs用于批量读取文件路径,匹配对应文件

完整实现代码

# 加载依赖包
library(tidyverse)
library(fs)

# 1. 定义两个文件夹的本地路径,可根据实际路径修改
dir_a <- "./a"
dir_b <- "./b"

# 2. 读取两个文件夹下的所有目标文件,按文件后缀匹配可修改正则规则
# 示例匹配csv/tsv/txt格式文件,其他格式调整regexp参数即可
files_a <- dir_ls(dir_a, regexp = "\\.(csv|tsv|txt)$")
files_b <- dir_ls(dir_b, regexp = "\\.(csv|tsv|txt)$")

# 匹配两个文件夹下名称相同的对应文件
file_names_a <- path_file(files_a)
file_names_b <- path_file(files_b)
common_files <- intersect(file_names_a, file_names_b)

# 无匹配文件时终止运行并提示
if(length(common_files) == 0) stop("两个文件夹下不存在名称匹配的对应文件")

# 3. 批量处理每一组对应文件,提取chr_pos列差异
diff_result <- map_dfr(common_files, function(curr_file){
  # 分别读取两组文件
  df_a <- read_csv(file.path(dir_a, curr_file), show_col_types = FALSE)
  df_b <- read_csv(file.path(dir_b, curr_file), show_col_types = FALSE)
  
  # 检查文件是否包含chr_pos列
  if(!"chr_pos" %in% colnames(df_a)) stop(paste0("a文件夹下的", curr_file, "缺少chr_pos列"))
  if(!"chr_pos" %in% colnames(df_b)) stop(paste0("b文件夹下的", curr_file, "缺少chr_pos列"))
  
  # 提取两个文件的chr_pos值,默认去重,不需要去重则删除unique()
  pos_a <- unique(df_a$chr_pos)
  pos_b <- unique(df_b$chr_pos)
  
  # 计算差异值
  only_in_a <- setdiff(pos_a, pos_b) # 仅在a文件夹该文件中存在的chr_pos
  only_in_b <- setdiff(pos_b, pos_a) # 仅在b文件夹该文件中存在的chr_pos
  
  # 整理差异结果返回
  bind_rows(
    tibble(file_name = curr_file, chr_pos = only_in_a, exist_range = "仅a文件夹存在"),
    tibble(file_name = curr_file, chr_pos = only_in_b, exist_range = "仅b文件夹存在")
  )
})

# 4. 输出查看差异结果
print(diff_result)

# 可选:将差异结果导出为本地csv文件
write_csv(diff_result, "./chr_pos差异结果.csv")

结果说明

  • 输出的diff_result共3列:file_name为对应匹配的文件名,chr_pos为存在差异的位置值,exist_range标注该值仅存在于哪个文件夹的对应文件中
  • 若某组对应文件的chr_pos列完全一致,该文件不会出现在差异结果中

特殊场景调整

  • 若文件为excel格式,将read_csv替换为readxl::read_excel即可,提前安装readxl包
  • 若需要统计重复值的数量差异,删除代码中的unique(),改用table()统计两个文件的chr_pos出现频率后再做对比即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:06