如何在RStudio中从猫狗数据集抽取图片子集并迁移至新文件夹
在R中抽取猫狗数据集图片子集的实现方案
1. 核心思路
完全可以在RStudio里自动完成图片子集的抽取与复制/移动,无需手动操作。下面提供两种实现方式,优先推荐随机抽取(保证数据分布均衡),也支持按文件名顺序抽取。
2. 随机抽取图片(优先方案)
该方案会从猫、狗两类图片中分别随机抽取指定数量,确保子集的类别分布和原数据集一致:
# 替换为你的原始图片文件夹路径和目标子集文件夹路径 original_img_dir <- "你的train文件夹路径" target_sample_dir <- "你要创建的子集文件夹路径" # 创建目标文件夹(不存在则自动创建) dir.create(target_sample_dir, recursive = TRUE, showWarnings = FALSE) # 获取所有图片文件名 all_images <- list.files(original_img_dir, pattern = "\\.(jpg|jpeg)$", full.names = FALSE) # 分离猫、狗图片 cat_images <- grep("^cat", all_images, value = TRUE) dog_images <- grep("^dog", all_images, value = TRUE) # 随机抽取各1000张(可自行调整数量,比如各1500张凑3000总样本) sample_cats <- sample(cat_images, size = 1000) sample_dogs <- sample(dog_images, size = 1000) # 合并选中的图片列表 selected_images <- c(sample_cats, sample_dogs) # 复制图片到目标文件夹 file.copy( from = file.path(original_img_dir, selected_images), to = file.path(target_sample_dir, selected_images) )
3. 按文件名顺序抽取(备选方案)
如果不需要随机,直接按文件名顺序取前N张:
# 沿用上面的路径变量,直接执行以下代码 # 按顺序取猫、狗各1000张 sample_cats_order <- head(cat_images, 1000) sample_dogs_order <- head(dog_images, 1000) selected_images_order <- c(sample_cats_order, sample_dogs_order) # 复制到目标文件夹 file.copy( from = file.path(original_img_dir, selected_images_order), to = file.path(target_sample_dir, selected_images_order) )
4. 额外说明
- 若需要移动图片而非复制,将代码中的
file.copy替换为file.rename即可(注意:移动后原文件夹会丢失这些图片,谨慎操作) - 确保R对原始文件夹有读取权限,对目标文件夹有写入权限
- 可根据需求自由调整抽取的数量,比如总样本2500张就设置猫、狗各1250张
内容的提问来源于stack exchange,提问作者zappbran
相关产品推荐
相关产品推荐

