R for data science 之 stringr包

2023-11-15



作者简介Introduction

邬书豪,车联网数据挖掘工程师 ,R语言中文社区专栏作者。微信ID:wsh137552775

知乎专栏:https://www.zhihu.com/people/wu-shu-hao-67/activities


往期回顾

R for data science之purrr包(上)

R for data science之purrr包(下)

R可视化分析美国的肥胖症,嘿!

stringr包常用函数总结

stringr包是伟大的Hadley Wickham开发的处理字符串的程序包,该包包含的函数如下图:


这篇文章我会给大家举例讲解其中的几个常用函数,如果大家想详细的了解每个函数的具体用法,可以使用帮助函数help()去查看。

一、初识字符串

字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。下面给大家在R中去展示的字符串:

str1 <- 'Wu shuhao'
str2 <- '邬书豪'
str3 <- '《Kaggle十大案例精讲》'
str4 <- 'https://edu.hellobi.com/course/240'
str1; str2; str3; str4
class(str1)


上面的代码中,我们首先创建了四个字符串,分别是str1、str2...。然后我们分别输出这四个字符串,顺便使用class函数查看了其类别,返回“character”。


二、处理字符串的常用操作

对字符串的常用操作包括:获取字符串长度、获取字符串中某些字符的个数、字符串的拼接、拆分、匹配、替换、格式化字符串。

## 获取字符串长度

首先使用base包里面的nchar函数计算其长度,然后使用stringr包中的str_length函数和str_count函数计算字符串长度。

nchar(str1)
nchar(c(str2, str3, str4))

library(stringr)
str_length(str1)
str_length(c(str2, str3, str4))

str_count(str1)
str_length(c(str2, str3, str4))

## 对比nchar和str_length函数的计算速度
system.time(nchar(rep(c(str2, str3, str4), 1000000)))
system.time(str_length(rep(c(str2, str3, str4), 1000000)))


通过上面的对比,大家可能会有一个疑问:为什么stringr中的str_length和str_count函数的作用都是计算字符串的长度?实际上str_length函数的作用就是计算其长度,但是str_count函数还有其他的作用,即统计指定字符的个数。通过上面三个函数的计算速度对比,大家也就知道那个函数在计算字符串长度时效率高了。


## 计算字符串中某类字符的个数

在这种情况下,经常使用正则表达式去进行匹配。(正则表达式可以去百度搜索,由于比较多,我就不截图占篇幅了。)

str_count(str1, '[A-Z]')  # 计算大写字母的个数
str_count(str1, '[a-z]')  # 计算小写字母的个数
str_count(str4, '[0-9]')  # 计算数字的个数
str_count(str4, '\\d')    # 计算数字的个数
str_count(str4, '\\W')    # 计算任意非数字、大小写字母和下划线的个数

## 字符串拼接

paste(str3, str4)
paste(str2, str3, sep = ': ')
paste(rep(str2, 2), rep(str3, 2), sep = ':', collapse = ';  ')

str_c(str3, str4)
str_c(str2, str3, sep = ': ')
str_c(rep(str2, 2), rep(str3, 2), sep = ':', collapse = ';  ')


我们同样是使用了base包里面的paste函数和str_c函数进行字符串拼接的对比,用法一样。不过没有做批量的拼接对比,实际上结果是和上面的计算长度一致,批量处理时,stringr包里面的函数销量高。


## 字符串拆分

str_split(str4, '\\W', simplify = T)  # 按照标点符号拆分字符串,返回矩阵
str_split_fixed(str4, '\\W', 2)       # 按照标点符号拆分字符串,指定拆分为2部分



## 字符串匹配

str_extract(str4, '[0-9]+')       # 匹配字符串中的数字
str_sub(str3, 2, 13)              # 匹配字符串中某个具体未知的字符
str_sub(str3, 2, -2)              # 同上
str5 <- c("apple", "banana", "pear", "persimmon", "pinapple")
str_subset(str5, "a")             # 匹配字符串中包括‘a’的字符串
str_subset(str5, "^a")            # 匹配字符串中开头是‘a’的字符串
str_subset(str5, "a$")            # 匹配字符串中结尾是‘a’的字符串
str_locate(str4, 'com')           # 匹配字符串中指定字符的位置



## 字符串替换

str_replace(str1, 'Wu', 'wu')       # 匹配“Wu”,替换为“wu”
str_replace_all(str3, '[《》]', '')  # 匹配“《》”,替换为“”(空)



## 格式化字符串

str_to_lower(str1)               # 将所有的字符转换为小写
str_to_upper(str1)               # 将所有的字符转换为大写
str_to_title(str1)               # 将所有的字符转换为标题格式
str_to_title('this is a string') # 将所有的字符转换为标题格式


今天就写这点吧,还有很多字符串处理的函数。stringr包里面的各种处理字符串的函数的效率比较高,建议多尝试使用




 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)

相关课程推荐


Kaggle十大案例精讲课程(连载中)

☟☟☟ 戳阅读原文,即刻加入课程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R for data science 之 stringr包 的相关文章

  • MyBatis-Plus详解

    MyBatis Plus 1 简介 1 1 操作步骤 1 2 mybatis plus mapper编写规则 2 注解介绍 2 1 常用注解 2 2 mybatis plus通用Mapper接口 3 条件构造器 4 高级查询 4 1 列投影
  • 学习笔记:多重纹理

    学习笔记 多重纹理 2009 09 01 14 20 52 转载 分类 学习笔记 多重纹理 多重纹理就是在渲染一个多边形的时候可以用到多张纹理图 把多张纹理图进行一些颜色的操作 可以达到一些效果 但是多重纹理必须是在显卡支持的情况下 但是还
  • centOS 配置DNS

    修改 etc resolv conf 重启网卡或者重启电脑后 etc resolv conf会恢复到原来的状态 原因说明 CentOS redhat下面直接修改 etc resolv conf 达到临时效果 但是重启网络后会重置 重启后 根
  • c++ 结构体

    1 结构体定义 整形 长整形 字符型以及浮点型等这些数据类型指南记录单一的数据 而这些数据只能被称为基础数据类型 如果需要定义某种类型 同时包含以上几种的基本数据类型 比如一个人同时含有身高 体重以及年龄的属性 而结构体就是将这些变量类型包
  • @ApiImplicitParams这个注解的作用

    ApiImplicitParams这个注解的作用 ApiImplicitParams是一个用于描述方法参数的注解 它可以用在方法上 作用是为方法中的参数定义多个注解 并将这些注解集中到一个注解集中进行统一管理 通过 ApiImplicitP
  • 1028. 从先序遍历还原二叉树

    题目 https leetcode cn com problems recover a tree from preorder traversal 我们从二叉树的根节点 root 开始进行深度优先搜索 在遍历中的每个节点处 我们输出 D 条短
  • 机器学习--Logistic Regression(逻辑回归)---分类器

    写在之前 带着问题去学习 往往能够让我们有着一个纲领的学习方法 而不会迷失在各种概念 和公式的推导中 1 什么是逻辑回归 逻辑回归的推导 损失函数的推导分别是什么 为什么LR需要归一化或者说取log 2 LR为什么要用sigmoid函数 这
  • 深度学习中分类和回归常见损失函数归纳小结

    1 引言 在深度学习领域中 损失函数定义了模型的预测与目标值之间的距离 因此我们必须正确地选择它 只有这样所有的参数才会根据其值进行更新 损失函数的选择取决于模型的设计 在这篇文章中 我们主要讨论两种常见的的任务 即回归和分类 2 回归损失
  • 蓝桥杯算法训练-印章

    这一题是10月份新加的题 网上也没啥答案 标签为dp动态规划 实际上我觉得不用动态规划也能做 毕竟python是自带了求组合数的函数 下面来看一下吧 试题 算法训练 印章 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 共
  • mybatis逆向工程

    使用mybatis的逆向工程生成JavaBean和mapper以及映射文件只需要三个步骤 1 逆向工程maven依赖 2 编写配置文件genarator xml 3 编写主函数 启动类 一 maven依赖
  • 基于AIOT技术的智慧校园空调集中管控系统设计与实现

    毕业论文 设计 题 目 基于AIOT技术的智慧校园空调集中管控系统设计与实现 指导老师 XXXX 专业班级 电子商务2XXXX 姓 名 XXXX 学 号 20XXXXXXXXX 20XX年XX月XX日 摘要 近年来 随着物联网技术和人工智能
  • 【计算机视觉】BLIP:源代码示例demo(含源代码)

    文章目录 一 Image Captioning 二 VQA 三 Feature Extraction 四 Image Text Matching 一 Image Captioning 首先配置代码 import sys if google
  • LU分解,LDLT分解,Cholesky分解

    LU分解 如果方阵是非奇异的 即的行列式不为0 LU分解总是存在的 A LU 将系数矩阵A转变成等价的两个矩阵L和U的乘积 其中L和U分别是下三角和上三角矩阵 而且要求L的对角元素都是1 形式如下 本质上 LU分解是高斯消元的一种表达方式
  • 一个简单的chrome拓展程序开发

    最近突然觉得有些常用的功能可以写成浏览器插件 就不用把代码放到console控制台运行了 只要点击插件图标就可以自动运行 会方便很多 就去查了下chrome插件开发教程 本质上讲 chrome插件就是以一些特殊的方式运行一些特定的html
  • vant组件使用van-field解决邮箱校验问题

    需求 用户在返回到上一页的时候 保存用户的编辑资料 所以用户在输入邮箱的时候 校验是否正确 使用van field
  • Redis基础-命令梳理

    文章目录 一 Redis 客户端的基本语法 二 基础数据类型 字符串 String 三 基础数据类型 哈希 Hash 四 基础数据类型 列表 List 五 基础数据类型 集合 Set 六 基础数据类型 有序集合 Sorted set 一 R
  • 关于canvas画布上绘制多个(单个也一样)不规则多边形,用户点击这张画布时,判断点击的是哪个多边形

    首先来看看canvas效果图 上面是我在canvas上绘制了多个不规则多边形 如果不是很了解怎么绘制 可以看我上个博客canvas画图 盒子结构 div class imgBox div
  • Container With Most Water

    Given n non negative integers a1 a2 an where each represents a point at coordinate i ai n vertical lines are drawn such
  • 似然场模型初识

    slam 激光雷达的数学模型之似然场模型 光束模型的缺点 计算量大 每一个位姿需要进行N次raytracing N为每一帧激光的激光束数量 在非结构化环境中 比较杂乱的环境中 使用光束模型会导致当位姿发生微小变化时 得分从非常高一下改变为趋
  • 五人合伙最佳股份分配_有限责任公司与合伙企业傻傻分不清,纳税又有什么不同?...

    我们经常见到许多的公司类型 xx公司xx合伙等等 每种不同的形式纳税是不是有所不同 合伙企业分为 普通合伙企业和有限合伙企业 其中 普通合伙企业又包含特殊的普通合伙企业 1 普通合伙企业由2人以上的普通合伙人 没有上限规定 组成 普通合伙企

随机推荐

  • STL源代码剖析笔记----第一章STL概论与版本简介

    在现在这家公司半年了 虽说也学了不少东西 但是总觉得自己的技术还不够成熟 不过好处就是 有大把的时间可以自己支配 闲来无事便把侯捷先生的STL源代码剖析拿出来看了一下 在工作中用的最多的还是STL 自己也曾尝试些属于自己的一些算法 但是 结
  • easy mock本地部署和nuxt项目初始化

    easy mock本地部署和nuxt项目初始化 一 说明 easy mock和nuxt项目创建初始化用到的nodejs版本有差异 前者需要低版本 后者初始化需要高版本 所以需要nvm管理nodejs版本 安装nvm 下载地址https gi
  • nodejs17/18版本报错:digital envelope routines::unsupported

    一 临时方案 cmd或终端执行 export NODE OPTIONS openssl legacy provider 二 修改系统环境变量 新建一个系统环境变量配置 配置信息如下 NODE OPTIONS openssl legacy p
  • 系统U盘制作工具WinToUSB,也可以将系统安装到U盘

    WinToUSB 轻松将Windows WinPE安装到USB移动硬盘或者U盘 Hasleo WinToUSB是个免费的U盘安装系统工具 可以将操作系统ISO WIM ESD SWM文件或CD DVD光驱安装到U盘或者移动硬盘 Window
  • Hbase学习2:部署

    http dblab xmu edu cn blog install hbase HBASE 官网 https hbase apache org book html preface Use the following legend to i
  • 程序员分类

    程序员 前端 html css javascript bootstrap jQuery Node js Augular TypeScript ReactJS vue js 后端 Java Python Go C C Ruby Node js
  • LeetCode-1615. 最大网络秩【图】

    LeetCode 1615 最大网络秩 图 题目描述 解题思路一 简单暴力 用一个矩阵g记录每对点之间是否连通 如果连通g a b g b a 1 然后用一个一位数组cnt记录每一个点的度 最终答案是每对城市之间的最大网络秩即max cnt
  • 机器学习、深度学习常用专业术语

    主要记录一些深度学习中可能用到的专业术语 一般是碰到了不懂的才记录 所有没有按一定的规律记录 持续更新 1 梯度下降 gradient descent 2 学习速率 learning rate 学习率指每次迭代中 对成本函数的 最小化次数
  • 用 Python 快速追踪基金的收益情况(2022年4月更新)

    来源 Python数据之道 ID PyDataLab 作者 阳哥 大家好 我是阳哥 大家知道 近几年 不少同学都是经由基金进入到股市中的 至于股票和基金到底谁更好 这个仁者见仁智者见智 恐怕一时半会儿也说不清楚 2021年 阳哥曾经分享过
  • 机器学习课后题——贝叶斯

    第四章 贝叶斯分类器 1 简述朴素贝叶斯的优缺点 答 朴素贝叶斯的主要优点有 算法比较简单 易于实现 快速 易于训练 朴素贝叶斯模型有稳定的分类效率 对小规模的数据表现很好 能处理多分类任务 适合增量式训练 尤其是数据量超出内存时 可以一批
  • 今天是我的生日,也是我的离职日!

    前言 时间就是这么巧妙 今天是我的生日 也是我的离职日 职场中有人来 就有人走 本是件很平常的事 在这里祝自己生日快乐 江湖路远 后会有期 今天是我的生日 也是我的离职日 一 往昔 二 ZQ的人事物 三 离职建议 四 后会有期 一 往昔 记
  • 【JavaScript面向对象详解】

    ES6之前的JavaScript面向对象比较不好理解 涉及到很多知识和思想 ES6增加了class和extends来实现类的封装和继承 但是通过babel转换成ES5之后还是之前的一套逻辑 这里 我打算用四篇文章 来讲解一下关于ES5中面向
  • k8s ingress配置wss编排模板

    前段时间遇到了一个k8s配置websocket的问题 需要配置一下 由于wss比较安全 结合tls证书才能配置成功 如果是ws则无法在https的网站上面直接使用 wss才行 下面给出配置文件 希望帮助到需要的伙伴 配置一个新的单独为所有w
  • 【学习笔记】——appium移动端自动化测试实战

    最近学习了appium移动端自动化测试 以qq登录模块的功能进行实战学习 主要涉及到的技术有 python appium unittest 数据驱动 weditor查看元素定位 断言 测试报告 最后以pom模式呈现效果 在学习过程中 除了元
  • java类的静态变量调用_Java学习笔记八---类的静态变量与静态方法的访问与调用方式...

    静态变量又称类变量 静态方法又称类方法 它们统称为静态成员或类成员 静态成员由static修饰 是属于整个类的 所有的对象共享这些静态成员 不需要创建任何对象 静态成员在类装载时就已初始化了 整个运行期间其内存位置不变 直到类卸载 鉴于静态
  • apache 插件开发之过滤器 (filter)

    过滤器 filter A filter is a process that is applied to data that is sent or received by the server Data sent by clients to
  • Unity实现Camera和Audio数据的低延迟RTMP推送技术探讨

    关于Unity实现RTMP直播推送技术方案 之前零散的写过几篇介绍 得到了好多开发者的关注 以Android平台为例 目前视频这块 我们demo实现的是Camera数据的采集 然后编码投递到底层 如果设备没有性能瓶颈 可达到高帧率 60帧
  • 自动化测试的类型​以及自动化测试的几个误区!

    有三种主要类型的自动化测试 一 自动化单元测试 编辑 自动化单元测试在代码级别上进行测试 bug是在开发人 员编写的函数 方法和例程中识别出来的 一些公司要求开发人员自己进行单元测试 而有些公司则雇用专门的测试自动化资源 这些资源可以访问源
  • 2021最新Apache漏洞分析

    漏洞简介 2021年9月16日 Apache官方发布了Apache httpd mod proxy SSRF漏洞CVE 2021 40438 影响v2 4 48及以下版本 该漏洞影响范围较广 危害较大 利用简单 不得不引起重视 漏洞搭建 d
  • R for data science 之 stringr包

    作者简介Introduction 邬书豪 车联网数据挖掘工程师 R语言中文社区专栏作者 微信ID wsh137552775 知乎专栏 https www zhihu com people wu shu hao 67 activities 往