当前位置: 首页 > news >正文

r语言tidyverse教程:5 字符串处理stringr

文章目录

R语言系列:

  • 编程基础💎循环语句💎向量、矩阵和数组💎列表、数据帧
  • 排序函数💎apply系列函数
  • tidyverse:readr💎tibble💎tidyr💎dplyr💎stringr

stringrtidyverse的字符串处理函数,和R语言原生的字符串处理函数相比,其API风格统一,功能完备,十分推荐使用

功能函数
拼接与分割str_cstr_split, str_split_fixed
定位;匹配;提取str_locatestr_matchstr_extract
删除;替换str_removestr_replace
检测;计数str_detectstr_count
格式化str_glue
头尾修饰补齐str_pad;删除str_trim, str_squish
大小写转换str_to_lower, str_to_upper, str_to_title, str_to_sentence
复制str_dup
排序str_sort, str_order
截取str_sub, str_subset, str_which
字符串长度str_length

拼接与分割

str_c为字符串拼接函数;可以拼接字符和字符数组,关键字collapse为折叠符,用于连接数组内的字符;sep为分隔符,用于连接数组间或者字符串间的字符。

library(stringr)str_c("a","b")    # 返回 ab# 下面三个均返回a_b
str_c("a","b",sep = "_")
str_c(c("a"), c("b"), sep="_")
str_c(c("a","b"), collapse="_")# 返回a/c_b/d
str_c(c("a","b"),c("c","d"),sep = "/",collapse = "_")

分割函数有两个,str_splitstr_split_fixed,后者可以指定分割块数。参数pattern表示分隔符,当pattern=""时,将字符串分割成单个字符。通过simplify可指定返回的数据类型,T返回矩阵。

# 字符分割,"b" "a" "n" "a" "n" "a"
str_split("banana", "")# 字符分割,返回矩阵
str_split("banana","a",simplify = T)"返回值如下[,1] [,2] [,3] [,4]
[1,] "b"  "n"  "n"  ""  
"# 指定分割块数
str_split_fixed("banana", "", n = 3)##      [,1] [,2] [,3]  
## [1,] "b"  "a"  "nana"

检测计数

str_count用于计数,str_detect用于检测,二者的区别在于,检测只返回TRUE或者FALSE,计数则在此之上返回具体个数

# 单个目标字符计数,返回1 1 0
str_count(string = c("sql","json","java"),pattern = "s")# 多个目标字符计数 返回1 1 2
str_count(string = c("sql","json","java"),pattern = c("s","j","a"))# 元字符查找计数(fixed包裹元字符) 返回2
str_count(string = "a..b",pattern = fixed("."))str_detect(string = c("sql","json","java"),pattern = "s")
## 返回 TRUE  TRUE FALSE

定位、提取、匹配、删除、替换

定位、提取、匹配的操作逻辑是相似的,区别在于返回值,定位返回的是匹配字符的位置;提取和匹配则返回匹配值。而删除和替换功能则必须基于匹配、定位的基础上。这四种功能均有两种实现,后面带有_all的,表示返回所有匹配,否则只匹配第一个。

定位str_locatestr_locate_all
提取str_extractstr_extract_all
匹配str_matchstr_match_all
删除str_removestr_remove_all
替换str_replacestr_replace_all

此外,替换还有一个简单的str_replace_na函数,用于将NA替换成字符串"NA"

# 定位
> str_locate_all("banana", "an")# [[1]]
#      start end
# [1,]     2   3
# [2,]     4   5# 匹配
str_match_all("banana", "an")# [[1]]
#     [,1]
# [1,] "an"
# [2,] "an"# 提取
str_extract_all("banana", "an")## [[1]]
## [1] "an" "an"# 提取,返回矩阵
str_extract_all("banana", "an", simplify = T)
#      [,1] [,2]
# [1,] "an" "an"# 删除 返回"ba"
str_remove_all("banana", "an")# 替换 返回bANANa"
str_replace_all("banana", "an", "AN")

格式化

尽管字符串格式化函数只有str_glue,但头尾修饰、大小写转换也可以理解为一种格式化方案,所以归类在一起。

其中str_glue的逻辑是,识别字符串中的{},并将花括号中的内容理解为变量,然后将变量转换为字符串,是很现代的处理方法

name <- "jack"
age <- 12
str_glue("I'm {name}, {age} years old.")
# 返回I'm jack, 12 years old.

str_pad可在字符串的左右两侧添加单个字符;str_trim可删除左右两侧的空格;str_squish可删除字符串中多余的空格。

# 默认字符串左边补齐 width用于指定宽度 返回"00114514"
str_pad(string = "114514", width = 8, pad = "0")# 字符串右边补齐 返回"114514xx"
str_pad("114514", 8, side = "right", pad = "x")str_pad("114514", 8, "both", "0") # 返回01145140str_trim("  I'm   jack  ")    # 返回 "I'm   jack"
str_squish("  I'm   jack  ")  # 返回 "I'm jack"

大小写转换语句中,str_to_title会将所有单词首字母转大写,其他字母小写;str_to_sentence则只将句首第一个字母转为大写,其他字母小写。

stringr包中其他的有用函数,用于常见的字符处理。

# 字符转为小写
str_to_lower("I'm jack")  # 返回 "i'm jack"
str_to_upper("I'm jack")  # 返回 "I'M JACK"
str_to_title("I'm jack")  # 返回 "I'm Jack"
str_to_sentence("I'm Jack") # 返回 "I'm jack"

其他函数

str_sort返回排序后的字符串数组;str_order则返回排序后的索引向量。排序函数默认升序,若将decreasing设为TRUE,则采用降序

# 降序排序,返回"sql"    "python" "json"
str_sort(c("sql","json","python"), decreasing = TRUE)# 升序排序,返回索引向量 2 3 1
str_order(c("sql","json","pythn"))

str_sub通过指定开始和结束位置,得到子串,当索引值为正时,表示正数,为负数表示倒数。str_subset, str_which则通过匹配模式,过滤出满足模式的字符串。

# 字符过滤 从第1个到倒数第2个 返回 banan
str_sub("banana", start = 1,end = -2)# 字符串过滤 ^s为正则表达式语法,表示是开头 返回 sql
str_subset(string = c("java","sql","python"),pattern = "^s")# 字符串过滤,返回匹配字符串位置  返回2
str_which(string = c("java","sql","python"),pattern = "^s")

str_dup可将字符向量重复若干次,并返回重复后的字符向量。

str_dup(c("I", "m", "jack"),times = 2)## [1] "II"       "mm"       "jackjack"

str_length可以返回字符串长度

str_length("banana") # 返回 6

相关文章:

r语言tidyverse教程:5 字符串处理stringr

文章目录 R语言系列&#xff1a; 编程基础&#x1f48e;循环语句&#x1f48e;向量、矩阵和数组&#x1f48e;列表、数据帧排序函数&#x1f48e;apply系列函数tidyverse&#xff1a;readr&#x1f48e;tibble&#x1f48e;tidyr&#x1f48e;dplyr&#x1f48e;stringr stri…...

知识变现海哥:知识变现的本质就是卖

知识变现的本质就是卖&#xff0c;而有人买的本质&#xff0c;就是你解决了某方面的需求。 好的成交&#xff0c;从来都是相互的&#xff0c; 只靠一边主动推销来维系是远远不够的。 绝对不是靠忽悠&#xff0c;而是靠实力。 先讲一个故事。 19世纪时&#xff0c;一个年轻的…...

jdbc和druid和mybatis之间的关系

第一种方式 jdbc整合了:加载数据库驱动,创建连接,写原生语句,执行,关闭这些东西. 第二种方式 mybatis对jdbc进行封装,他允许你通过配置的形式,配置数据库参数,并且允许你通过xml来写动态sql语句.if:test让你可以把sql变得灵活起来.并且还能将你的查询结果直接映射到你想要的…...

云原生Istio案例实战

目录 1 Istio监控功能1.1 prometheus和grafana1.2 访问prometheus1.3 访问grafana 2 项目案例&#xff1a;bookinfo2.1 理解什么是bookinfo2.2 sidecar自动注入到微服务2.3 启动bookinfo2.4 通过ingress方式访问2.5 通过istio的ingressgateway访问2.5.1 确定 Ingress 的 IP 和端…...

解读赛力斯年报:华为智选车的B面

作者 | Amy 编辑 | 德新 赛力斯&#xff0c;华为智选车的B面。 2021年&#xff0c;赛力斯SF5进入华为渠道销售&#xff0c;华为自此开启了智选车模式。到年末&#xff0c;双方更是推出AITO品牌。AITO凭借M5/M7等车型在2022年拿下了超过7.5万台的销量&#xff0c;成为增长最快的…...

互联网内卷严重?你咋不看看其他行业呢?无非是三十晚上无月亮,大家都一样

一千个人眼中有一千个哈姆雷特&#xff0c;互联网行业就像一座围城&#xff0c;城外的人想进来&#xff0c;城内的人要么卷要么躺要么润 ​ 真实的感受你可以现在约几个面试体验一下。内卷到什么程度&#xff1f; 产品和运营岗&#xff0c;业务经验不完全对口简历都过不了&am…...

CompletableFuture异步任务编排使用

CompletableFuture异步任务编排使用 runAsync 和 supplyAsyncallOf 和 anyOfjoin 和 getwhenComplete 和 whenCompleteAsync 和 exceptionallyhandle 和 handleAsync 串行编排runAsync().thenRunAsync()supplyAsync().thenAcceptAsync((res) ->{})supplyAsync().thenApplyAs…...

Scala的高级用法

文章目录 1. 默认参数值1.1 方法默认参数1.2 类默认参数 2. 特质 (Traits)2.1 子类型2.2 扩展特征&#xff0c;当做接口来使用 3.元组3.1 定义与取值3.2 元组用于模式匹配3.3 用于for循环 4 高阶函数4.1 常见的高阶函数map4.2 简化涨薪策略代码 5.嵌套方法6.多参数列表&#xf…...

【31.在排序数组中查找元素的第一个和最后一个位置】

给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&#xff1a…...

如何构建“Buy Me a Coffee”DeFi dApp

&#x1f978; 本教程来自官网&#xff1a;https://docs.alchemy.com/docs。对原文部分内容进行了修改。教程中所有实例经过本人实践&#xff0c;代码可见&#xff1a;https://github.com/ChuXiaoYi/web3Study 区块链技术令人惊叹&#xff0c;因为它使我们能够使用代码和软件编…...

Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计

目录 二值状态统计判断用户登陆态SETBIT 命令GETBIT 命令第一步&#xff0c;执行以下指令&#xff0c;表示用户已登录。第二步&#xff0c;检查该用户是否登陆&#xff0c;返回值 1 表示已登录。第三步&#xff0c;登出&#xff0c;将 offset 对应的 value 设置成 0。 用户每个…...

3 天,入门 TAURI 并开发一个跨平台 ChatGPT 客户端

TAURI 是什么 TAURI 是一个使用 Rust 编写的程序框架&#xff0c;它允许我们使用 Web 技术和 Rust 语言构建跨端应用。它提供了大量特性&#xff0c;例如系统通知、网络请求、全局快捷键、本地文件处理等&#xff0c;它们都可以在前端通过 JavaScript 便捷的调用。 TAURI 应用…...

14个最佳创业企业WordPress主题

要创建免费网站&#xff1f;从易服客建站平台免费开始 500M免费空间&#xff0c;可升级为20GB电子商务网站 创建免费网站 您网站的设计使您能够展示产品的独特卖点。通过正确的主题&#xff0c;您将能够解释为什么客户应该选择您的品牌而不是其他品牌。 在本文中&#xff0…...

MySQL基础(三十)PowerDesigner的使用

1 PowerDesigner的使用 PowerDesigner是一款开发人员常用的数据库建模工具&#xff0c;用户利用该软件可以方便地制作 数据流程图 、概念数据模型 、 物理数据模型&#xff0c;它几乎包括了数据库模型设计的全过程&#xff0c;是Sybase公司为企业建模和设计提供的一套完整的集…...

nginx 服务器总结

一. 负载均衡的作用有哪些&#xff1f; 1、转发功能 按照一定的算法【权重、轮询】&#xff0c;将客户端请求转发到不同应用服务器上&#xff0c;减轻单个服务器压力&#xff0c;提高 系统并发量。 2、故障移除 通过心跳检测的方式&#xff0c;判断应用服务器当前是否可以正常…...

基于Hebb学习的深度学习方法总结

基于Hebb学习的深度学习方法总结 0 引言1 前置知识1.1 Hebb学习规则1.2 Delta学习规则 2 SoftHebb学习算法2.1 WTA(Winner Take All)2.2 SoftHebb2.3 多层Hebb网络2.4 Hebb学习的性能测评 3 参考文献 0 引言 总所周知&#xff0c;反向传播算法&#xff08;back-propagating, B…...

思科模拟器 | 访问控制列表ACL实现网段精准隔绝

文章目录 一、ACL工作原理二、ACL分类初步介绍三、标准ACL1、标准ACL的决策过程2、标通配符掩码关键字3、标准ACL网络拓扑4、标准ACL演示5、实战讲解 四、扩展ACL1、基础语法明细2、扩展ACL示例3、扩展ACL网络拓扑4、实战讲解 五、总结与提炼 一、ACL工作原理 ACL&#xff08;A…...

Python os模块详解

1. 简介 os就是“operating system”的缩写&#xff0c;顾名思义&#xff0c;os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方面页也可以极大增强代码的可移植性。如果该模块中相…...

Oracle PL/SQL基础语法学习13:比较运算符

系列文章目录 Oracle PL/SQL基础语法学习12&#xff1a;短路求值 Oracle PL/SQL基础语法学习13&#xff1a;比较运算符 Oracle PL/SQL基础语法学习14&#xff1a;BOOLEAN表达式 文章目录 系列文章目录Oracle PL/SQL基础语法学习13&#xff1a;比较运算符比较运算符介绍官方文档…...

金仓数据库适配记录

金仓数据库适配记录 人大金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES)是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。 金仓数据库主要面向事务处理类应用,兼顾各类数据分析类应用,可用做管理信息系统、…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...