前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R海拾遗-stringr

R海拾遗-stringr

作者头像
火星娃统计
发布2020-09-15 15:43:32
3240
发布2020-09-15 15:43:32
举报
文章被收录于专栏:火星娃统计火星娃统计

stringr

sunqi
2020/8/13

概述

字符串处理比较优秀的包

代码

代码语言:javascript
复制
library(stringr)
library(tidyverse)
rm(list=ls())
#获取字符串长度

iris %>% mutate(len=str_length(Species)) %>% head()
代码语言:javascript
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species len
## 1          5.1         3.5          1.4         0.2  setosa   6
## 2          4.9         3.0          1.4         0.2  setosa   6
## 3          4.7         3.2          1.3         0.2  setosa   6
## 4          4.6         3.1          1.5         0.2  setosa   6
## 5          5.0         3.6          1.4         0.2  setosa   6
## 6          5.4         3.9          1.7         0.4  setosa   6
代码语言:javascript
复制
# 字符串拼接
iris %>% mutate(z=str_c(Sepal.Length,Sepal.Width,sep="_")) %>% head()
代码语言:javascript
复制
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species       z
## 1          5.1         3.5          1.4         0.2  setosa 5.1_3.5
## 2          4.9         3.0          1.4         0.2  setosa   4.9_3
## 3          4.7         3.2          1.3         0.2  setosa 4.7_3.2
## 4          4.6         3.1          1.5         0.2  setosa 4.6_3.1
## 5          5.0         3.6          1.4         0.2  setosa   5_3.6
## 6          5.4         3.9          1.7         0.4  setosa 5.4_3.9
代码语言:javascript
复制
# 字符串取子集
x <- c("Apple", "Banana", "Pear")
# 第一个参数为字符串
# 第二个参数为起始位置
# 第三个参数为长度
str_sub(x, 1, 3)
代码语言:javascript
复制
## [1] "App" "Ban" "Pea"
代码语言:javascript
复制
# str_sub支持赋值操作
str_sub(x, 1, 1) <- "Q"
x
代码语言:javascript
复制
## [1] "Qpple"  "Qanana" "Qear"
代码语言:javascript
复制
# 对字符串进行匹配
# str_view()
x<-c("job","sex","hello")
# pattern 支持正则表达式
# str_view用于可视化观察
# 对于大数据没什么用,玩玩可以
str_view(string = x, pattern = "o")
  • job
  • sex
  • hello
代码语言:javascript
复制
c("s.d") %>%
  str_view("\\.")# 双反斜杠用于转义字符
  • s.d
代码语言:javascript
复制
# 开始匹配和末尾匹配
str_view(x, "^j")
  • job
  • sex
  • hello
代码语言:javascript
复制
str_view(x, "x$")
  • job
  • sex
  • hello
代码语言:javascript
复制
x <- c("apple pie", "apple", "apple cake")
str_view(x, "^apple$")
  • apple pie
  • apple
  • apple cake
代码语言:javascript
复制
# 任意匹配
# \d:匹配任何数字。
# \s:匹配任何空格(如空格、制表符、换行符)。
# [abc]:匹配a, b或c。
# [^abc]除a、b、c之外,可以匹配任何字符。

str_view(c("sunqi", "suoqi"), "su[on]qi")
  • sunqi
  • suoqi
代码语言:javascript
复制
# 重复的问题
# 如果中间有100个任意字符,那么就需要有100个中括号
# 这是不合理的
# ? 匹配0或者1此
# + 1此或者无数次
# * 0次或者无数此
c("ssssddddswdsdsdsdsdss") %>% str_view("s?")
  • ssssddddswdsdsdsdsdss
代码语言:javascript
复制
c("ssssddddswdsdsdsdsdss") %>% str_view("s+")
  • ssssddddswdsdsdsdsdss
代码语言:javascript
复制
c("ssssddddswdsdsdsdsdss") %>% str_view("s*")
  • ssssddddswdsdsdsdsdss
代码语言:javascript
复制
#也支持正则中的{}

c("ssssddddswdsdsdsdsdss") %>% str_view("s{2}")
  • ssssddddswdsdsdsdsdss
代码语言:javascript
复制
c("ssssddddswdsdsdsdsdss") %>% str_view("s{2,3}")
  • ssssddddswdsdsdsdsdss
代码语言:javascript
复制
# 回溯引用

fruit1 <- fruit %>% head(10)
# 提取有相邻重复字符的字符
# (.)匹配任意字符
# \\1 再次匹配
str_view(fruit1, "(.)\\1", match = TRUE)
  • apple
  • bell pepper
  • bilberry
  • blackberry
  • blackcurrant
  • blood orange
  • blueberry
代码语言:javascript
复制
# 匹配abab, wcwc
# 两个点表示两个字符
str_view(fruit1, "(..)\\1", match = TRUE)
  • banana
代码语言:javascript
复制
# 匹配abba, wccw
# 1和2表示位置
str_view(fruit1, "(.)(.)\\2\\1", match = TRUE)
  • bell pepper
代码语言:javascript
复制
# 匹配anan
str_view(fruit1, "(.)(.)\\1\\2", match = TRUE)
  • banana

结束语

stringr的字符匹配需要一定的正则表达式知识,除非做文本挖掘,其实也不需要深究。

love&peace

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • stringr
    • 概述
      • 代码
        • 结束语
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档