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

如何在R中从图片名称列提取信息生成新因子列?

R实现从图片名称列提取信息生成新因子列

核心思路

Image列的字符串通过下划线_分隔,我们需要提取第3、4、5段内容,以及第6段去掉.tif后缀的内容,将这些内容转为新的因子列Name1至Name4,并调整列顺序匹配需求。


方案一:Base R 实现

无需额外安装包,用基础R函数完成:

# 读取CSV数据(替换为你的文件路径)
df <- read.csv("data.csv", stringsAsFactors = FALSE)

# 按下划线拆分图片名称列
split_image <- strsplit(df$Image, "_")

# 提取对应位置的片段并处理后缀
df$Name1 <- sapply(split_image, function(x) x[3])
df$Name2 <- sapply(split_image, function(x) x[4])
df$Name3 <- sapply(split_image, function(x) x[5])
df$Name4 <- sapply(split_image, function(x) sub("\\.tif$", "", x[6]))

# 将新列转换为因子类型
df[, c("Name1", "Name2", "Name3", "Name4")] <- lapply(df[, c("Name1", "Name2", "Name3", "Name4")], as.factor)

# 调整列顺序(匹配示例输出结构)
df <- df[, c("Image", "Name1", "Name2", "Name3", "Name4", "Class", "Num Detections")]

方案二:Tidyverse 实现(dplyr + stringr)

适合熟悉tidyverse生态的用户,代码更简洁直观:

# 先安装并加载所需包(首次使用需安装)
# install.packages(c("dplyr", "readr", "stringr"))
library(dplyr)
library(readr)
library(stringr)

# 读取CSV数据
df <- read_csv("data.csv")

# 拆分、提取、生成新列
df <- df %>%
  # 将图片名称拆分为临时列(保留原Image列)
  separate(Image, into = paste0("temp", 1:6), sep = "_", remove = FALSE) %>%
  # 生成目标因子列,处理Name4的后缀
  mutate(
    Name1 = as.factor(temp3),
    Name2 = as.factor(temp4),
    Name3 = as.factor(temp5),
    Name4 = as.factor(str_remove(temp6, "\\.tif$"))
  ) %>%
  # 移除临时列,调整列顺序
  select(Image, Name1, Name2, Name3, Name4, Class, `Num Detections`)

注意事项

  • 如果图片名称的分隔规则有变化,需要调整提取的索引位置(比如x[3]对应拆分后的第3个片段)
  • 若存在其他图片后缀(如.png),可修改正则表达式为"\\.(tif|png)$"以适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:36:18