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

科学研究中有时候咱们收集到的数据很乱,不能马上进行分析,如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数据科学

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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 的…

POJ 2836 Rectangular Covering 状态压缩DP(铺砖问题)

一、题目大意 坐标系中有n个点&#xff0c;它们满足 -1000<x<1000,-1000<y<1000。 现在要在坐标系中放一些矩形&#xff0c;要使得每个点都被矩形覆盖&#xff08;被矩形的边或者顶点覆盖也可以&#xff09;&#xff0c;每个矩形都必须满足面积大于0&#xff0c;…

实时云渲染技术在智慧园区中的广泛应用

智慧园区是指通过运用先进的信息技术&#xff0c;利用物联网、大数据、云计算等技术手段&#xff0c;来实现对园区内各类设备、设施和资源进行监测、管理、控制和优化的平台。这一概念旨在提高园区运行的效率、实现资源的可持续利用&#xff0c;并通过数字化和智能化手段来推动…

超级干货!如何挖公益SRC实战/SQL注入

目录 一、信息收集 二、实战演示 三、使用sqlmap进行验证 四、总结 一、信息收集 1.查找带有ID传参的网站&#xff08;可以查找sql注入漏洞&#xff09; inurl:asp idxx 2.查找网站后台&#xff08;多数有登陆框&#xff0c;可以查找弱口令&#xff0c;暴力破解等漏洞&…

Lombok超详解

目录 一、Lombok概述 二、Lombok插件安装 三、Lombok相关注解 3.1 Setter和Getter 3.2 ToString 3.3 EqualsAndHashCode&#xff0c;NonNull 3.4 NoArgsConstructor&#xff0c;RequiredArgsConstructor&#xff0c;AllArgsConstructor 3.5 Data 3.6 Builder 3.7 Log…

Python 如何实现桥接设计模式?什么是桥接(Bridge)设计模式?

什么是桥接&#xff08;Bridge&#xff09;设计模式&#xff1f; 桥接&#xff08;Bridge&#xff09;设计模式是一种结构型设计模式&#xff0c;它的主要目的是将抽象部分与实现部分分离&#xff0c;以便它们可以独立地变化。这种模式通过创建一个桥接接口&#xff0c;连接抽…

Node.js详解

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎&#xff08;Google Chrome 的内核&#xff09;&#xff0c;利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…

使用 PPO 算法进行 RLHF 的 N 步实现细节

当下&#xff0c;RLHF/ChatGPT 已经变成了一个非常流行的话题。我们正在致力于更多有关 RLHF 的研究&#xff0c;这篇博客尝试复现 OpenAI 在 2019 年开源的原始 RLHF 代码库&#xff0c;其仓库位置位于 openai/lm-human-preferences。尽管它具有 “tensorflow-1.x” 的特性&am…

基于SSM的校园家教兼职信息交流平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

三行Python代码即可将视频转Gif

一、前言 很多网站提供视频转GIF的功能&#xff0c;但要么收费要么有广告 实际上我们通过python&#xff0c;几行代码就能够实现视频转gif 二、教程 1. 安装必备库moviepy pip install moviepy -i https://pypi.tuna.tsinghua.edu.cn/simple 2. 写入代码 from moviepy.edi…

盘点一款制作电子杂志的网站,小白也能快速上手

随着科技的进步&#xff0c;电子宣传册已经成为了企业宣传和推广的重要工具之一。它们不仅易于制作和更新&#xff0c;而且可以轻松地在网络上传播&#xff0c;让更多的人了解您的品牌和产品。 现在&#xff0c;给大家推荐一款FLBOOK在线制作电子杂志平台。无需任何专业的设计技…

手写LASSO回归python实现

import numpy as np from matplotlib.font_manager import FontProperties from sklearn.datasets import make_regression from sklearn.model_selection import train_test_split import matplotlib.pyplot as pltclass Lasso():def __init__(self):pass# 数据准备def prepar…

MQTT协议详解及在Android上的应用

MQTT协议详解及在Android上的应用 一、MQTT协议简介二、MQTT工作原理三、MQTT协议特点四、MQTT在Android上的应用4.1 准备工作4.2 示例代码 五、结论 本博客将全面介绍MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的基本概念、工作原理、特点以及在An…

转录组测序学习第二弹

安装软件 前面已经安装好了conda&#xff0c;那么我们现在需要安装我们后续需要用到的软件 1.先进入我们前面建立的虚拟环境中 conda activate my_env2.安装软件 conda install -y sra-tools conda install -y trimmomatic conda install -y cutadapt multiqc conda install…

MATLAB 状态空间设计 —— LQG/LQR 和极点配置算法

系列文章目录 文章目录 系列文章目录前言一、相关函数 —— LQG/LQR 和极点配置算法1.1 LQR —— lqr 函数1.1.1 函数用法1.1.2 举例1.1.2.1 倒摆模型的 LQR 控制 1.2 LQG —— lqg() 函数1.2.1 函数用法1.2.2 举例 前言 状态空间控制设计方法&#xff0c;如 LQG/LQR 和极点配…

Google play个人开发者账号最新政策要求——必须20人连续14天封闭测试

前几天&#xff0c;Google play官方宣布了一项针对个人开发者账号发布新应用的政策要求&#xff0c;即从2023年11月13日后注册的个人开发者账号&#xff0c;其应用必须满足特定的测试要求&#xff0c;才能在 Google Play 中上架。 该政策表示&#xff0c;如果开发者使用的是20…

Java相关编程思想

少用继承多用“组合”——在现有类的基础上组织一个新类。 2.继承要用“is”来检验&#xff0c;如果继承者is被继承者&#xff0c;说明这是一个比较好的继承。 3.向上造型&#xff0c;把实现方法留给继承者去实现。&#xff08;动态绑定&#xff09; 4.把接口理解为抽象类的进一…

第一百七十四回 如何创建扇形渐变背景

文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在 上一章回中介绍了"如何创建线性渐变背景"相关的内容&#xff0c;本章回中将介绍" 如何创建扇形渐变背景"。闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

Python 如何实现适配器设计模式?什么是适配器(Adapter)设计模式?

什么是适配器设计模式&#xff1f; 适配器&#xff08;Adapter&#xff09;设计模式是一种结构型设计模式&#xff0c;它允许接口不兼容的类之间进行合作。适配器模式充当两个不兼容接口之间的桥梁&#xff0c;使得它们可以一起工作&#xff0c;而无需修改它们的源代码。 主要…

CTFhub-RCE-过滤空格

1. 查看当前目录&#xff1a;127.0.0.1|ls 2. 查看 flag_890277429145.php 127.0.0.1|cat flag_890277429145.php 根据题目可以知道空格被过滤掉了 3.空格可以用以下字符代替&#xff1a; < 、>、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 $IFS在li…