如何在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
相关产品推荐
相关产品推荐

