「答果子问」R语言如何提取特定的字符串

2024-06-23 20:48

本文主要是介绍「答果子问」R语言如何提取特定的字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

R语言如何提取特定的字符串

这个帖子是为了果子的一个提问

R语言能不能实现匹配括号里面的内容, 但是不包括括号

这个问题来自于他的一篇帖子有些GEO平台的探针转换比较麻烦, 里面提取字符串的代码不够简洁。

果子在原帖里面引用我的一句话,"正则表达式是我们认识这个世界的哲学".既然我说了这句话,那么我就得贯彻我的哲学理念,在R里面用正则表达式把数据给提取了。

首先在https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL4381把对应的数据给下载了

2013053-a8a1f2014469e1f1.png
数据下载

然后用data.tablefread进行高效智能的读取数据

GPL4381 <- data.table::fread("GPL4381-4306.txt")

正则表达式的核心在于观察数据,提取模式,这也就是我说"正则表达式是我们认识这个世界的哲学"的原因,因为我们就是通过不断观察世界研究规律指导生活。

2013053-da88eb109974a870.png
观察模式

从上图中你发现了什么,是不是都是"xxxx(基因名),xxx"这种情况。

于是我们就可以通过R语言的regexpr提取上面基因名的位置信息了

pattern <- ".*\\((?<ID>[A-Za-z0-9]*)\\),.*"
result <- regexpr(pattern= pattern, text = GPL4381$GB_DEFINITION, perl=TRUE)

仔细观察下我的写的模式识别,pattern <- ".*\\((?<ID>[A-Za-z0-9]*)\\),.*", 你会发现我用到一个你未必见过的模式,(?<>),这是Perl 的正则表示系统里的模式,所以必须用perl=TRUE才能被R解读。它的作用就是把括号里面的模式单独分组。

regexpr会返回匹配的内容的起始位置,匹配长度。如果匹配, 位置为"-1"

start <- attr(result,"capture.start")
length <- attr(result,"capture.length")
name <- attr(result,"capture.name")

之后,我们可以用substr根据位置信息进行提取。

geneID <- ifelse(start > 0, substr(GPL4381$GB_DEFINITION, start[,name],start[,name] + length[,name]-1),NA)

最终你查看geneID的前10个的时候,你会发现就是你想要的

head(geneID,n=10)
2013053-eb1c4babe65e9545.png
前十个

当然如果你用stringr, 那代码其实更加简洁一些

res <- stringr::str_match(string = GPL4381$GB_DEFINITION, pattern = pattern)
geneID <- res[,2]
head(geneID)
2013053-574303d0b63c744b.png
前10个

说下核心知识点:

  • regexpr可以返回匹配的起始位置和匹配长度,返回-1表示没有匹配
  • (?<组名>匹配模式): 对匹配内容进行分组, 在perl=TRUE下使用。

这篇关于「答果子问」R语言如何提取特定的字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088235

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Go语言使用Gin处理路由参数和查询参数

《Go语言使用Gin处理路由参数和查询参数》在WebAPI开发中,处理路由参数(PathParameter)和查询参数(QueryParameter)是非常常见的需求,下面我们就来看看Go语言... 目录一、路由参数 vs 查询参数二、Gin 获取路由参数和查询参数三、示例代码四、运行与测试1. 测试编程路

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据