「答果子问」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

相关文章

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件