R语言提取文字(字符串)中的内容--正则式(2)

news2024/12/25 13:44:41

科学研究中有时候咱们收集到的数据很乱,不能马上进行分析,如SEER数据,用过都知道,咱们需要对数据进行清洗,从数据中提取咱们需要的东西,才能进行分析,这时候有个有用的东西叫正则式,对于我们在字符串中提取数据非常实用,上一章《R语言提取文字(字符串)中的内容–正则式(1)》咱们已经初步介绍了一些正则式的常见函数,今天咱们进一步介绍正则式使用。
别害怕看不懂,你正在一点点向前迈进!这个东西需要慢慢积累!
在这里插入图片描述
我们先导入数据,假设咱们有一串很乱的数据,

readLines("E:/r/test/messages.txt")

在这里插入图片描述
而我们想需要对它进行整理,咱们需要找到其中关于水果的数据,方便利于统计,但是计算机可不认识什么是水果
正则表达式提供了一系列用于表示模式的符号。
上述模式可以被描述成^\w+:\s\d+$,
其中的元符号(meta-symbols)用来表示一类字符。下面是一些简单的介绍,具体看参考文献。
• ^:这个符号表示一行的开始。
• \w:这个符号表示一个字母或数字。
• \s:这个符号表示一个空格字符。
• \d:这个符号表示一个数字字符。
• $:这个符号表示一行的结束。

"\w+“意味着一个或更多个字母,”:"是我们希望在单词后面看到的符号,
"\d+"表示一个或更多个数字字符。这个模式表达了所有我们需要的情况,并且排除了所有不需要的情况。
我们先进行我们需要的匹配,继续使用上次咱们使用的grep函数来匹配字符串。我们可以看到水果中例如苹果(apple: 20)都是这种字母加冒号(:)再加数字来表示,但是字母的个数不确定,数字的个数不确定,因此我们可以告诉计算机,字母加冒号(:)再加数字就是水果。
我们先写一个规则匹配符。

matches <- grep("^\\w+:\\s\\d+$",bc)

在这里插入图片描述
上面这段代码我来解释一下,^表示这行开始,$表示这行结束,\w 中 \w表示开头的是字母,但是\需要再加一个\来转义,所以写成2个\,\w+表示它可以是一个或者多个字符。接着的冒号(:)表示我们在字母后面需要看到一个冒号。\s表示冒号后面接着一个空格,还要再加一个\进行转义,我们这里注意一下,空格也是要占位的,不处理空格很多时候会导致匹配失败 ,\d+和w+的意思差不多,表示1个或者多个数字,也是要再加一个\进行转义的,所以写成\d+。这段内容体会一下。
根据规则,计算机帮我们选出1,3,5,6是水果,咱们提取就可以了。

bc[matches]

在这里插入图片描述
这样就轻易把其中的水果的内容提取出来了。如果咱们使用stringr包,功能更加强大,它是以矩阵的形式提取数据,

library(stringr)
matches <- str_match(bc,"^(\\w+):\\s(\\d+)$")
matches

在这里插入图片描述
Stringr包的str_match函数规则与grep稍微不同,多个字符匹配的内容需要括号()包起来,而且它的功能更加强大,把每个组件都提取出来,我更加喜欢。

咱们再来看个例子,先导入数据

be<-readLines("E:/r/test/messages.txt")
be

在这里插入图片描述
数据连在一起,我们需要的是下面这样的数据,分类分条好的

在这里插入图片描述
这相当于数据清理了,当数据量大的时候是没办法手工做的。咱们先对数据其中一行进行分析,可以看到第一个是日期,带二个是时间,后面两个是字母,不过一个是逗号连接,一个是空格连接,还是很有规律的
2014-02-01,09:20:29,Ken,James,Hey, how are you?
继续使用刚才我们使用的str_ _match函数,
日期的提取可以使用

(\\d+-\\d+-\\d+)

时间的的提取可以用

(\\d+:\\d+:\\d+)

提取逗号连接的字符

(\\w+),(\\w+)

提取空格链接的字符,这里要说一下\s表示空格,但是要注意一下大写S和小写s是不同的。\s*表空格出现零次、一次或者更多次,(.+)中,点符号(.)可代替任意符号,(.+)在这里表示可以是任意内容,最后以$结尾

\\s*(.+)$

咱们把上面的内容串联起来

pattern <- "^(\\d+-\\d+-\\d+),(\\d+:\\d+:\\d+),(\\w+),(\\w+),\\s*(.+)$"
matches <- str_match(be,pattern)

在这里插入图片描述
可以看到内容都被单独提取出来了稍微整理一下就是咱们所需要的数据了

df <- data.frame(matches[, -1])
colnames(df) <- c("Date", "Time", "Sender", "Receiver", "Message")

在这里插入图片描述
正则式初看有些复杂,当你理解掌握后用处很大,这个需要慢慢的积累。

推荐几个好的教程,共同学习,见参考文献

参考文献

  1. https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md#4-零宽度断言前后预查
  2. http://www.regexlab.com/zh/regref.htm
  3. R语言编程指南
  4. R语言编程艺术
  5. R数据科学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1214540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iceoryx(冰羚)-简介

概要 RouDi RouDi是Routing and Discovery的缩写。RouDi负责通信设置&#xff0c;但实际上并不参与发布者与订阅者或客户端与服务器之间的通信。鲁迪可以被认为是iceoryx的总机操作员。它的另一个主要任务是设置共享内存&#xff0c;应用程序使用共享内存交换有效负载数据。Ro…

Go语言常用命令详解(一)

文章目录 前言常用命令go build示例参数说明 go test示例参数说明 go run示例参数说明 go clean示例参数介绍 总结写在最后 前言 Go语言是一种开源的编程语言&#xff0c;由Google开发并于2009年首次发布。它以其简洁、高效和并发性能而备受开发者的喜爱。作为一门相对年轻的语…

本地视频AI人脸替换,一键启动,傻瓜式操作

本地无须准备配置和运行环镜&#xff0c;整个压缩包下载后解压&#xff0c;一键启动程序&#xff0c;只需一张照片和一个视频&#xff0c;就可以把视频中的人物替换成您想要的人脸。支持CPU和GPU解码&#xff0c;使用GPU解码速度较快。 所有使用的软件安装包已上传网盘&#x…

提升pip速度!设置pip全局镜像源,速度飞起!

文章目录 💢 问题 💢💯 解决方案 💯🐾 镜像源🐾 镜像全局配置🍄 Windows系统🍄 Linux和macOS系统🍄 添加环境变量的方式💢 问题 💢 由于“某些网络限制”原因,我们在使用pip安装python模块的时候速度会比较慢,这个时候我们就需要用到一些镜像源,本文将…

requests 技术问题与解决方案:解决字典值中列表在URL编码时的问题

本文将探讨 issue 80 中提出的技术问题及其解决方案。该问题主要涉及如何在模型的 _encode_params 方法中处理列表作为字典值的情况。 问题背景 在处理用户提交的数据时&#xff0c;有时需要将字典序列化为 URL 编码字符串。在 requests 库中&#xff0c;这个过程通常通过 par…

点成分享丨如何提高旋转蒸发仪的蒸馏提纯效率

旋转蒸发仪&#xff1a; 主要用于医药、化工和制药等行业的浓缩、结晶、干燥、分离及溶媒回收。其原理为在真空条件下&#xff0c;恒温加热&#xff0c;使旋转瓶恒速旋转&#xff0c;物料在瓶壁形成大面积薄膜&#xff0c;高效蒸发。溶媒蒸气经高效玻璃冷凝器冷却&#xff0c;…

如何修改Hosts文件(Windows、Linux)本机配置域名解析

Hosts文件是一种在计算机网络中存储主机名与IP地址对应关系的文本文件。通过配置Hosts文件&#xff0c;可以避免在网络环境中DNS无法正常解析时&#xff0c;出现无法访问互联网的问题。 Windows修改hosts文件 1 以windows10系统为例&#xff0c;手指同时按住 windows 键和 X 键…

《洛谷深入浅出基础篇》P1536 村村通——并查集

上链接&#xff1a;P1536 村村通 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1536 上题干&#xff1a; 题目描述 某市调查城镇交通状况&#xff0c;得到现有城镇道路统计表。表中列出了每条道路直接连通的城镇。市政府 "村村通工程…

Flutter 3.16 发布,快来看有什么更新吧

参考原文&#xff1a;https://medium.com/flutter/whats-new-in-flutter-3-16-dba6cb1015d1 Flutter 又又又发布新季度更新啦&#xff0c;同时随着而来的还有 Dart 3.2&#xff0c;本次 3.16 开始 Material 3 会成为新的默认主题&#xff0c;另外 Android 也迎来了 Impeller 的…

力扣第797题 所有可能的路径 C++ 深度优先搜索 +java

题目 797. 所有可能的路径 中等 相关标签 深度优先搜索 广度优先搜索 图 回溯 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从…

郑州市管城区工信局局长任华民一行莅临中创算力调研指导工作

2023年11月15日&#xff0c;为深入了解企业生产经营情况&#xff0c;解决发展诉求。郑州市管城区工信局局长任华民等领导一行莅临中创算力&#xff0c;中创副总经理杨光、技术总监刘朝阳、行政主管生田等人员陪同调研。 调研期间&#xff0c;双方就生产经营、“算力数据中心”…

零基础学Python怎么学习?我来告诉你

对于IT新手来说&#xff0c;零基础学Python的话&#xff0c;之后可选择的职业方向非常多。Python全栈和爬虫一直以来都是市场的最火的就业岗位之一&#xff0c;它们的薪资回报也算是开发岗里面的顶级了。而且随着大数据和人工智能时代的到来&#xff0c;数据处理和人工智能行业…

Python | 机器学习之逻辑回归

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《人工智能奇遇记》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1. 机器学习之逻辑回归概念 1.1 机器学习 1.2 逻辑回归 2. 逻辑回归 2.1 实验目的…

通过注释来埋点

目录 开始 插件编写 功能一 功能二 功能三 合并功能 运行代码 总结 这篇文章主要讲如何根据注释&#xff0c;通过babel插件自动地&#xff0c;给相应函数插入埋点代码&#xff0c;在实现埋点逻辑和业务逻辑分离的基础上&#xff0c;配置更加灵活 这篇文章想要达到的效…

idea查看UML类图

idea查看UML类图 一、如何查看UML类图 1.1 选择需要查看的类或者包&#xff0c;鼠标右键&#xff0c;选择Diagrams->Show Diagram 1.2 对于UML类图中的包&#xff0c;选中后点击鼠标右键-> Expand Nodes(展开节点) 展开前 展开后 1.3 展开后分布比较凌乱&#xff…

inner join left join 什么情况效果相同

效果不同的情况 SELECT g.name AS groupName, g.root_code AS rootCode, g.data_sort AS groupDataSort, l.* FROM wise_system_point_group g LEFT JOIN wise_system_point_list l ON g.code l.group_code WHERE g.code "drug" ORDER BY g.data_sort, l.data_s…

DBA_IND_STATISTICS 字段含义

功能 展示数据库中所有索引的优化器统计信息。 字段说明 参考&#xff1a;https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000885743

骨传导式蓝牙耳机值得入手吗?盘点最值得入手的5款骨传导耳机

在骨传导耳机还没有火之前&#xff0c;相信很多朋友都是使用入耳式和头戴式耳机比较多一点&#xff0c;但是慢慢的会发现&#xff0c;这两种耳机都存在很大的问题&#xff0c;比如说入耳式耳机&#xff0c;长时间佩戴会造成耳朵痛等问题&#xff0c;而头戴式耳机因为隔音效果好…

一文解释对比学习

对比学习是一种无监督学习技术&#xff0c;其核心思想是通过比较不同样本之间的相似性和差异性来学习数据的表示&#xff08;features&#xff09;。它不依赖于标签数据&#xff0c;而是通过样本之间的相互关系&#xff0c;使得模型能够学习到有意义的特征表示。 在对比学习中…

金融行业备份容灾:如何满足严格行业标准同时实现成本效益优化?

北京时间11月9日&#xff0c;中国工商银行股份有限公司在美全资子公司——工银金融服务有限责任公司&#xff08;ICBCFS&#xff09;遭受勒索软件攻击&#xff0c;导致部分业务系统中断&#xff0c;造成部分市场的重大损失。中国工商银行的这次网络攻击事件也再次凸显了金融系统…