R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)

0 前言

数据根据结构可以分为结构化数据、非结构化数据和半结构化数据,前面介绍的数据处理函数针对于结构化数据,而字符串通常包含非结构化或者半结构化数据,这一部分介绍一下R和Python中的字符串函数。

1 目录

  • 三种数据结构简介
  • R与Python字符串函数
  • 字符串函数-基于R
  • 字符串函数--基于Python

2 三种数据结构

数据根据结构分为三种:结构化数据、非结构化数据、半结构化数据。

结构化数据可以使用关系数据库(RDBMS)存储,可以使用二维表来逻辑表达实现的数据(R和Python中的数据框类型数据)。数据以行为单位,每一行表示一个实体的信息,例如下图数据;结构化数据存储和排列很有规律,这有利于数据的查询和修改,但是扩展性不好,例如需要增加一个字段,需要对表进行添加列操作。

半结构化数据介于完全结构化数据和完全无结构化数据之间,具有一定的结构性。也就是说不符合关系型数据库而无法使用二维表逻辑表达的数据,和普通文本相比,半结构化数据具有一定的结构性,OEM(Object exchange Model)是一种典型的半结构化数据模型。XML、HTML文档就属于半结构化数据,数据的结果和内容混在一起,没有明显的区分。对于这种数据一般是化解为结构化数据。

非结构化数据,没有结构性的数据,各种文档、图片、视频、音频等都属于非结构化数据。对于非结构性数据,一般直接整体进行存储,而且通常存储为二进制的数据格式。

3 R与Python字符串函数

R语言中推荐使用stringr包里面的函数进行字符串处理,Python中有正则表达式库re和内置的字符串string包。

4 字符串函数--基于R

R语言中自带的字符串函数操作起来非常难用,而且函数名字经常记不住,因此这里介绍stringr包,提供了大部分字符串处理函数(如果发现很难使用stringr包中函数实现,可以考虑使用stringi,里面包含了全部字符串处理函数),函数名都是以str_开头,函数的名称更加直观,比较容易记住。

stringr包中函数按照是否使用正则表达式分为使用正则表达式函数和其他函数,函数参数中有pattern参数的则为使用正则表达式函数。按照函数功能可分为:字符串拼接函数、字符串计算函数、字符串匹配函数和字符串转换函数,如图:

下面会按照字符串其他函数、R语言中正则表达式以及使用正则表达式的字符串函数进行介绍。

4.1 非正则表达式字符串函数

str_c()函数

字符串组合函数。组合两个或者多个字符串或者将字符向量合并为字符串,返回一个字符串

str_c(..., sep = "", collapse = NULL)

参数

sep : 字符串之间的分割方式使用sep参数控制

collapse : 控制字符串向量之间的连接方式

library(stringr)str_c("Flash", "Workingnots")str_c("Flash", "Workingnots", sep = "-")str_c("Flash", "Workingnots", sep = "&")

str_c()是向量化的,当一个短向量和一个长向量组合的时候,会自动循环短向量,返回字符串长度与长向量长度一致:

str_c("Flash", c(1:10), sep = "_")

将字符向量组合成字符串,分隔参数使用collapse:

str_c(c("Flash", "WorkingNotes"), collapse = "&")

str_trim()函数

删除字符串两端的空格、换行符以及制表符;

str_trim(string, side = c("both", "left", "right"))

参数

side : 制定删除的位置,both:两端的空格都删除;left:删除左边的空格;right:删除右边的空格

text <- "  Flash WorkingNotes \n\t\n"str_trim(text, side = "both")str_trim(text, side = "left")str_trim(text, side = "right")

str_pad()函数

字符串填充函数。指定字符串的长度,不足长度的位置用填充符填充,字符串长度已经长于指定长度,不填充。

str_pad(string, width, side = c("left", "right", "both"), pad = " ")

参数

width :指定填充后的字符串长度

side : 填充的位置,同str_trim()的参数

pad : 指定填充的字符,默认为空格

text <- "Flash WorkingNotes"str_length(text)
str_pad(text, width = 30, side = "both", pad = "*")str_pad(text, width = 30, side = "left", pad = "*")str_pad(text, width = 30, side = "right", pad = "*")str_pad(text, width = 30, side = "both")str_pad(text, width = 10, side = "both")

str_dup()

字符串复制函数,使用参数控制复制的次数。

str_dup(string, times)

参数

times : 用于指定字符串复制的次数

str_dup("Flash", times = 3)str_dup("Flash", times = 2)

str_wrap()函数

用于控制字符串的输出格式,用于段落的划分,可以指定每行的长度,首行缩进等,和cat()函数一起使用。

str_wrap(string, width = 80, indent = 0, exdent = 0)

参数

width : 指定每一行的长度

indent : 指定第一行的缩进格式,默认无缩进

exdent : 指定第一行的之后其他行的缩进格式

text <- " 数据科学主要以统计学、机器学习、数据可视化等,使用工具将原始数据转换为认识和知识(可视化或者模型),主要研究内容包括数据导入、数据转换、可视化、构建模型等。当前R语言和Python是两门最重要的数据科学工具,本系列主要介绍R和Python在数据导入、数据转换、可视化以及模型构建上的使用."
cat(str_wrap(text, width = 60, indent = 4))cat(str_wrap(text, width = 60, indent = 4, exdent = 2))

str_sub()

根据指定开始和结束位置提取字符串子集。

str_sub(string, start = 1L, end = -1L)

参数

start : 指定开始位置

end :指定结束位置

text <- "Flash WorkingNotes"str_sub(text, start = 1, end = 5)

参数start和end可以是向量:

str_sub(text, c(1,7), c(5, 13))

str_length()

返回字符串长度,如遇到NA,返回NA,若想遇到NA返回长度为2的话,需要使用str_replace_na()函数将NA转换成字符串NA。

str_length(c("Flash", "WorkingNotes", NA))str_length(c("Flash", "WorkingNotes", str_replace_na(NA)))

str_sort()和str_order()函数

字符串排序函数,两者的区别是str_sort()返回排序后的字符,str_order()返回排序后的索引下标。

str_order(x, decreasing = FALSE, na_last = TRUE, locale = "en",  numeric = FALSE, ...)
str_sort(x, decreasing = FALSE, na_last = TRUE, locale = "en",  numeric = FALSE, ...)

参数

decreasing : 排序方式,默认升序

na_last : 是否将缺失值排在最后

locale : 区域设置,一般默认是英语

text <- c("1", "2", "E",  "F", "a", "l", "s", "h")str_sort(text, decreasing = TRUE)str_order(text, decreasing = TRUE)
text <- c("1", "2", "E",  "F", "a", "l", "s", "h", NA)str_sort(text, decreasing = TRUE, na_last = TRUE)str_sort(text, decreasing = TRUE, na_last = FALSE)

word()函数

从句子中根据位置提取单词。

word(string, start = 1L, end = start, sep = fixed(" "))

参数

start : 从第几个单词开始提取

end : 指定提取到哪个位置的单词

sep :单词之间的分隔符

text <- c("Flash workingNotes", "flash working note")word(text, start = 1)word(text, start = 2)word(text, start = -1)word(text, start = 2, end = -1)

str_replace_na()函数

将NA转换成字符串NA,不然字符串之间操作缺失值会传染。

str_c("Flash", NA)str_c("Flash", str_replace_na(NA))

str_to_upper()、str_to_lower()、str_to_title()函数

str_to_upper()将字符串转换成大写;

str_to_lower()将字符串转换成小写;

str_to_title()将字符串首字母转换成大写;

text <- "fLash workingNotes"str_to_upper(text)str_to_lower(text)str_to_title(text)

本文分享自微信公众号 - 数据分析1480(lsxxx2011)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python小教程

Python 环境搭建

你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。

11340
来自专栏芋道源码1024

性能优化指南(5000 字小结)

作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统。本文从以下几个方面来思考这个问题:性能优化...

5410
来自专栏纯洁的微笑

第1天:Python 环境搭建

其实 Python 已经是一个很老的编程语言了,到现在(2019年) Python 已经高龄 28 岁,比很多程序员的年龄都大。现在之所以这么流行和社区、人工智...

7620
来自专栏烟草的香味

浮点数的运算精度丢失

1/5,使用小数表示为0.2,但是1/3,使用小数表示就是一个无限循环小数:0.3333333, 也就是说,分数的 1/3+1/3=2/3,但如果使用小数:0....

12210
来自专栏sktj

Docker 部署简单flask应用

RUN yum install -y python3 RUN pip3 install flask COPY hello.py /tmp/hello.py ...

12930
来自专栏洞明学问

Python 开发工具

经过一段时间的学习和练习,也算对 Python 入了门,现在需要进行项目的开发了,环境配置可以说是开发过程中最重要的一件事,另外一件事就是包管理了,今天在使用的...

8720
来自专栏sktj

Layui 日期时间控件

1、需要加载模块:laydate https://www.layui.com/laydate/ 2、

41310
来自专栏洞明学问

Python 开发环境管理

虚拟环境主要合适 virtualenv 和 virtualenvwrapper 来管理,在 Windows 系统上,则使用的是 virtualenvwrappe...

5820
来自专栏数据森麟

真香还是假香,Python处理分析128张Excel表格竟然不到3秒?

更新完Pandas基础教程,后台有不少旁友留言,想要了解怎么用Python提升处理数据的效率,或者说怎么用Python自动处理多张Excel表格,于是乎便有了本...

7410
来自专栏网络交换FPGA

IC工程师的通用技能:文本处理

以上摘录自【The Pragmatic Programmer: From Journeyman to Master】,中文译名“程序员修炼之道——从小工到专...

7120

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励