r语言tidyverse教程:5 字符串处理stringr
文章目录
R语言系列:
- 编程基础💎循环语句💎向量、矩阵和数组💎列表、数据帧
- 排序函数💎apply系列函数
- tidyverse:readr💎tibble💎tidyr💎dplyr💎stringr
stringr
是tidyverse
的字符串处理函数,和R语言原生的字符串处理函数相比,其API风格统一,功能完备,十分推荐使用
功能 | 函数 |
---|---|
拼接与分割 | str_c ;str_split, str_split_fixed |
定位;匹配;提取 | str_locate ;str_match ;str_extract ; |
删除;替换 | str_remove ;str_replace |
检测;计数 | str_detect ;str_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_split
和str_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_locate | str_locate_all |
提取 | str_extract | str_extract_all |
匹配 | str_match | str_match_all |
删除 | str_remove | str_remove_all |
替换 | str_replace | str_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语言系列: 编程基础💎循环语句💎向量、矩阵和数组💎列表、数据帧排序函数💎apply系列函数tidyverse:readr💎tibble💎tidyr💎dplyr💎stringr stri…...

知识变现海哥:知识变现的本质就是卖
知识变现的本质就是卖,而有人买的本质,就是你解决了某方面的需求。 好的成交,从来都是相互的, 只靠一边主动推销来维系是远远不够的。 绝对不是靠忽悠,而是靠实力。 先讲一个故事。 19世纪时,一个年轻的…...
jdbc和druid和mybatis之间的关系
第一种方式 jdbc整合了:加载数据库驱动,创建连接,写原生语句,执行,关闭这些东西. 第二种方式 mybatis对jdbc进行封装,他允许你通过配置的形式,配置数据库参数,并且允许你通过xml来写动态sql语句.if:test让你可以把sql变得灵活起来.并且还能将你的查询结果直接映射到你想要的…...

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

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

互联网内卷严重?你咋不看看其他行业呢?无非是三十晚上无月亮,大家都一样
一千个人眼中有一千个哈姆雷特,互联网行业就像一座围城,城外的人想进来,城内的人要么卷要么躺要么润 真实的感受你可以现在约几个面试体验一下。内卷到什么程度? 产品和运营岗,业务经验不完全对口简历都过不了&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 扩展特征,当做接口来使用 3.元组3.1 定义与取值3.2 元组用于模式匹配3.3 用于for循环 4 高阶函数4.1 常见的高阶函数map4.2 简化涨薪策略代码 5.嵌套方法6.多参数列表…...
【31.在排序数组中查找元素的第一个和最后一个位置】
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1:…...

如何构建“Buy Me a Coffee”DeFi dApp
🥸 本教程来自官网:https://docs.alchemy.com/docs。对原文部分内容进行了修改。教程中所有实例经过本人实践,代码可见:https://github.com/ChuXiaoYi/web3Study 区块链技术令人惊叹,因为它使我们能够使用代码和软件编…...

Redis 实战篇:巧用 Bitmap 实现亿级海量数据统计
目录 二值状态统计判断用户登陆态SETBIT 命令GETBIT 命令第一步,执行以下指令,表示用户已登录。第二步,检查该用户是否登陆,返回值 1 表示已登录。第三步,登出,将 offset 对应的 value 设置成 0。 用户每个…...

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

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

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

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

基于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 引言 总所周知,反向传播算法(back-propagating, B…...

思科模拟器 | 访问控制列表ACL实现网段精准隔绝
文章目录 一、ACL工作原理二、ACL分类初步介绍三、标准ACL1、标准ACL的决策过程2、标通配符掩码关键字3、标准ACL网络拓扑4、标准ACL演示5、实战讲解 四、扩展ACL1、基础语法明细2、扩展ACL示例3、扩展ACL网络拓扑4、实战讲解 五、总结与提炼 一、ACL工作原理 ACL(A…...

Python os模块详解
1. 简介 os就是“operating system”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页也可以极大增强代码的可移植性。如果该模块中相…...
Oracle PL/SQL基础语法学习13:比较运算符
系列文章目录 Oracle PL/SQL基础语法学习12:短路求值 Oracle PL/SQL基础语法学习13:比较运算符 Oracle PL/SQL基础语法学习14:BOOLEAN表达式 文章目录 系列文章目录Oracle PL/SQL基础语法学习13:比较运算符比较运算符介绍官方文档…...
金仓数据库适配记录
金仓数据库适配记录 人大金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES)是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。 金仓数据库主要面向事务处理类应用,兼顾各类数据分析类应用,可用做管理信息系统、…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...