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

0 前言

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

1 目录

  • 三种数据结构简介

  • R与Python字符串函数

  • 字符串函数-基于R

  • 字符串函数--基于Python

2 三种数据结构

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

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

640?wx_fmt=png

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

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

3 R与Python字符串函数

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

4 字符串函数--基于R

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

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

640?wx_fmt=png

640?wx_fmt=png

    下面会按照字符串其他函数、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 = "&")

640?wx_fmt=png

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

 

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

640?wx_fmt=png

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

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

640?wx_fmt=png

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")

640?wx_fmt=png

str_pad()函数

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

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

参数

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

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

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

text <- "Flash WorkingNotes"	
str_length(text)

640?wx_fmt=png

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")

640?wx_fmt=png

str_dup()

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

str_dup(string, times)

参数

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

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

640?wx_fmt=png

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))

640?wx_fmt=png

str_sub()

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

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

参数

start : 指定开始位置

end :指定结束位置

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

640?wx_fmt=png

参数start和end可以是向量:

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

640?wx_fmt=png

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)))

640?wx_fmt=png

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)

640?wx_fmt=png

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)

640?wx_fmt=png

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)

640?wx_fmt=png

str_replace_na()函数

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

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

640?wx_fmt=png

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)

640?wx_fmt=png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值