【R语言 字符串处理】stringr 包的强大之处

来源:互联网 发布:mac os 10.13iso镜像 编辑:程序博客网 时间:2024/05/18 19:22

stringr包中主要内容:

  • 1、字符串拆分利器–str_split
  • 2、字符串替换利器–str_replace_all
  • 3、字符串抽取利器–str_match_all
  • 4、字符串截取利器–str_sub

字符串处理中最为常见的四种手段有“拆、替、抽、取”。强烈推荐stringr包,个人觉得远比R自带的grep、regexp、strsplit、sub等函数好用。

利器1:拆:str_split

str_split(string, pattern, n = Inf, simplify = FALSE)string:指定需要处理的字符串向量pattern:分隔符,可以是复杂的正则表达式n:指定切割的份数,默认所有符合条件的字符串都会被拆分开来simplify:是否返回字符串矩阵,默认以列表的形式返回
> str_split(c('lsxxx2011@163.com','0511-87208801'), '[@-]')[[1]][1] "lsxxx2011" "163.com"  [[2]][1] "0511"     "87208801"> 
#例如数据表中有一列邮箱字段,如何把地址和域名两部分拆分开来存储到新的两列中?email <- c('lsxxx2011@163.com','1029776077@qq.com','qazwsx@gmail.com','abc123edc@126.com')# 结合sapply函数获得@分隔符前面和后面的内容add <- sapply(str_split(email,'@'),'[',1)doman <- sapply(str_split(email,'@'),'[',2)df <- data.frame(email, add, doman)df
> df              email        add     doman1 lsxxx2011@163.com  lsxxx2011   163.com2 1029776077@qq.com 1029776077    qq.com3  qazwsx@gmail.com     qazwsx gmail.com4 abc123edc@126.com  abc123edc   126.com> 

利器2:替:str_replace与str_replace_all

str_replace(string, pattern, replacement)str_replace_all(string, pattern, replacement)string:字符串向量pattern:被替换的子字符串,可以是复杂的正则表达式replacement:用来替换的字符串

两个函数的区别在于,前面函数只替换首次满足条件的子字符串,后面的函数可以替换所有满足条件的子字符串。

#例子#将含有千分位符或百分位符的数据转换为数值型数据commadata <- c('123,456','780,123,433','45,234')percentdata <- c('23.4%','34.56','44.12%')commadatanew <- as.numeric(str_replace_all(commadata, ',', ''))percentdatanew <- as.numeric(str_replace_all(percentdata, '%', ''))/100commadatanewpercentdatanew

利器3:抽:str_extract和str_extract_all和str_match_all。

str_extract(string, pattern)str_extract_all(string, pattern, simplify = FALSE)string:字符串向量pattern:抽取出满足条件的子字符串,往往使用正则表达式simplify:是否返回字符串矩阵,默认以列表的形式返回两个函数的区别在于,前面函数只抽取出首次满足条件的子字符串,后面的函数可以抽取出所有满足条件的子字符串。当前面的函数没有匹配到抽取的结果,则返回NA,而后面的函数在没有匹配到抽取的结果时返回character(0)。str_match(string, pattern)str_match_all(string, pattern)函数参数的含义同str_extract。
例子:# 抽取出字符串中的日期和流量值s <- c('date:2017-04-14,pv:223453','date:2017-04-15,pv:228115','date:2017-04-16,pv:201233','date:2017-04-17,pv:324123')date <- str_extract_all(s, '[0-9]{4}-[0-9]{2}-[0-9]{2}')pv <- str_extract_all(s, 'pv:([0-9]*)')unlist(date)unlist(pv)#结果中的pv两竟然还是包含'pv:'字符串,下面我们用另一个抽函数str_match_all。pv <- str_match_all(s, 'pv:([0-9]*)')pv <- sapply(pv,'[',2)pv

利器4:取:str_sub

str_sub(string, start = 1L, end = -1L)string:字符串向量start:指定获取子字符串的起始位置end:指定获取子字符串的终止位置注意:如果start或end为负整数时,则从字符串的最后一个字符向前查询
#例子# 获取手机号的末尾4位(负整数参数)s <- c('13611235678','13912343344','17888886666')(tail4 <- str_sub(s, -4))
阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2018说普通话报既简单又漂亮 2018推广普通话报既简单又漂亮 既定 既定是什么意思 既旦读什么 既旦 既旦念什么 一个既一个旦念什么 既加旦念什么 既加旦 上面一个既下边一个旦读什么 一个既一个旦 色既是空 色既是空1 空既是色 既是 色既是空2 色既是空1高清中字在线 色既是空4高清中字在线 色既是空未3删减版手机在线 色既是空3中字手机观看 色既是空2高清中字免费观看 色既是空3中字免费观看 色既是空高清中字免费观 色既是空1手机观看 色既是空免费观看 色既是空什么意思 色既是空2高清中字在线 既是什么意思 既望 既望的意思 既望是指一个月中的哪一天 七月既望的望什么意思 既然就造句 既然造句 既然 既然意思 既然的意思 既然拼音 既然就 既然英语