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)是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。 金仓数据库主要面向事务处理类应用,兼顾各类数据分析类应用,可用做管理信息系统、…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
