《R数据科学实战:工具详解与案例分析 》 —2.5 stringr字符处理工具
2.5 stringr字符处理工具
与Hadley出品的其他tidy系列包一样,stringr也具有同样清晰的逻辑结构和参数设置。在stringr包中,函数的参数很少有超过三个的情况,各个常用的函数都只需要指定两到三个参数,这极大地简化了参数设置的过程。加之参数在结构和名称上的一致性,用户很容易就能做到融会贯通。stringr包总体来讲是将stringi总结并优化而来的一个包。简单的字符处理能力,可以极大地提高数据清理的效率。使用stringr包用户能够快速上手使用正则表达式,从而快速处理数据,同时对表达式的基本概念也能有一定的理解,为以后更复杂的任务做好铺垫。
2.5.1 baseR vs stringr
baseR中已存在一些使用正则表达式处理字符串的函数,例如,以grep为母函数的一众函数,包括最常用的gsub,等等。熟悉Linux系统的读者可能会觉得grep看起来很眼熟,这是因为R语言与其他编程语言一样,都借鉴了各种计算机语言的精华部分。表2-25列出了baseR中与字符串有关的函数及其与stringr包中相应函数的对比及小结。该表的意义在于,可以通过学习stringr包中的主要函数来帮助了解baseR包中的对应函数。因为stringr虽然简单易上手,但是在实际处理应用数据时,其在速度上会比baseR又略逊一筹,读者可以通过stringr包中的函数来练习字符处理的能力,在实际工作中使用baseR中的函数来执行具体任务。
表2-25 baseR和stringr包中字符串处理函数对比
下面的代码简略演示了str_replace和str_replace_all的区别以及参数设置。首先加载stringr包,然后创建一个练习用的字符串向量example_txt。对练习对象执行str_replace函数,参数pattern被设置为“a”—意为查询“a”第一次出现的位置,参数replacement设置为符号“@”—意为使用“@”来替代字母“a”。结果可以看到只有第一个“a”被替换,字符串中其他的“a”仍被保留。但是str_replace_all会将所有符合要求的部分全部替换掉。BaseR中的sub和gsub函数逻辑与str_replace和str_replace_all相同,只是包含了格外的参数设置来满足更复杂的任务需求。感兴趣的读者可以自行尝试。示例代码具体如下:
> library(stringr)
> example_txt <- "sub and gsub perform replacement of the first and all matches respectively."
> str_replace(string = example_txt,pattern = "a",replacement = "@")
## [1] "sub @nd gsub perform replacement of the first and all matches respectively."
> str_replace_all(string = example_txt,pattern = "a",replacement = "@")
## [1] "sub @nd gsub perform repl@cement of the first @nd @ll m@tches respectively."
- 点赞
- 收藏
- 关注作者
评论(0)