R 字符串处理函数整理

字符串处理虽然不是R语言中最主要的功能,却也是必不可少的,数据清洗、可视化等的操作 都会用到。
对于R语言本身的base包提供的字符串基础函数,随着时间的积累,已经变得很多 地方不一致,不规范的命名,不标准的参数定义,很难看一眼就上手使用。
字符串处理在其他 语言中都是非常方便的事情,R语言在这方面确实落后了。stringr包就是为了解决这个问题, 让字符串处理变得简单易用,提供友好的字符串操作接口.

常用的字符串的处理以str_开头来命名,方便更直观理解函数的定义。我们可以根据使用习惯 对函数进行分类:
字符串拼接函数
str_c: 字符串拼接。
str_join: 字符串拼接,同str_c。
str_trim: 去掉字符串的空格和TAB(\t)
str_pad: 补充字符串的长度
str_dup: 复制字符串
str_wrap: 控制字符串输出格式
str_sub: 截取字符串 str_sub<-截取字符串,并赋值,同str_sub

字符串计算函数
str_count: 字符串计数
str_length: 字符串长度
str_sort: 字符串值排序
str_order: 字符串索引排序,规则同str_sort

字符串匹配函数
str_split: 字符串分割
str_split_fixed: 字符串分割,同str_split
str_subset: 返回匹配的字符串
word: 从文本中提取单词
str_detect: 检查匹配字符串的字符
str_match: 从字符串中提取匹配组。
str_match_all: 从字符串中提取匹配组,同str_match
str_replace: 字符串替换
str_replace_all: 字符串替换,同str_replace
str_replace_na:把NA替换为NA字符串
str_locate: 找到匹配的字符串的位置。
str_locate_all: 找到匹配的字符串的位置,同str_locate
str_extract: 从字符串中提取匹配字符
str_extract_all: 从字符串中提取匹配字符,同str_extract

字符串变换函数
str_conv: 字符编码转换
str_to_upper: 字符串转成大写
str_to_lower: 字符串转成小写,规则同str_to_upper
str_to_title: 字符串转成首字母大写,规则同str_to_upper 参数控制函数,仅用于构造功能的参数,不能独立使用。
boundary: 定义使用边界
coll: 定义字符串标准排序规则。
fixed: 定义用于匹配的字符,包括正则表达式中的转义符
regex: 定义正则表达式

字符串拼接函数
str_c,字符串拼接操作,与str_join完全相同,与paste()行为不完全一致。
函数定义:

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

参数列表: …: 多参数的输入
sep: 把多个字符串拼接为一个大的字符串,用于字符串的分割符。
collapse: 把多个向量参数拼接为一个大的字符串,用于字符串的分割符。

str_c(c('a','a1'),c('b','b1'),sep='-') 
str_c(letters[1:5], " is for", "...") 
str_c('a','b',sep='-')#sep可设置连接符 
str_c('a','b',collapse = "-") # collapse参数,对多个字符串无效 str_c(c('a','a1'),c('b','b1'),collapse='-') 
str_c(head(letters), collapse = "") #把多个向量参数拼接为一个大的字符串 str_c(head(letters), collapse = ", ") 
str_c(letters[-26], " comes before ", letters[-1]) 
str_c(letters)#对比str_c()函数和paste()函数之间的不同点。
str_c('a','b') #把多个字符串拼接为一个大的字符串。 
paste('a','b') # 多字符串拼接,默认的sep参数行为不一致 # 向量拼接字符串,collapse参数的行为一致 
str_c(letters, collapse = "") #collapse 将一个向量的所有元素连接成一个字符串,collapse设置元 素间的连接符 
paste(letters, collapse = "") #拼接有NA值的字符串向量,对NA的处理行为不一致 str_c(c("a", NA, "b"), "-d") #若为空,则无法连接 paste(c("a", NA, "b"), "-d") #即使空,也可连接 
str_c(str_replace_na(c("a", NA, "b")), "-d") #即使空,也可连接

str_trim:去掉字符串的空格和TAB(\t)
函数定义:

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

参数列表:
string: 字符串,字符串向量。
side: 过滤方式,both两边都过滤,left左边过滤,right右边过滤 去掉字符串的空格和TAB(\t)

str_trim(string, side = c(“both”, “left”, “right”)) 

string:需要处理的字符串
side:指定剔除空格的位置,both表示剔除首尾两端空格,left表示剔除字符串首部空格,right 表示剔除字符串末尾空格

string <- ' Why is me? I have worded hardly! '
str_trim(string, side = ‘left’) 
str_trim(string, side = ‘right’) 
str_trim(string, side = ‘both’)

str_pad:补充字符串的长度
函数定义:

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

参数列表:
string: 字符串,字符串向量。
width: 字符串填充后的长度
side: 填充方向,both两边都填充,left左边填充,right右边填充
pad: 用于填充的字符

str_dup: 复制字符串
函数定义:

str_dup(string, times) 

参数列表:
string:需要重复处理的字符串
times:指定重复的次数

str_wrap,控制字符串输出格式
函数定义:

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

参数列表:
string: 字符串,字符串向量。
width: 设置一行所占的宽度。
indent: 段落首行的缩进值
exdent: 设置第二行后每行缩进

thanks_path <- file.path(R.home("doc"), "THANKS") 
thanks <- str_c(readLines(thanks_path), collapse = "\n") 
thanks <- word(thanks, 1, 3, fixed("\n\n")) 
cat(str_wrap(thanks), "\n") 
cat(str_wrap(thanks, width = 70), "\n") # 设置宽度为70个字符 cat(str_wrap(thanks, width = 80, indent = 6, indent = 2), "\n") # 设置宽度为80字符,首行缩进2字 符 
cat(str_wrap(thanks, width = 80, indent = 6, exdent = 2), "\n") # 设置宽度为80字符,非首行缩进2 字符 

str_sub,截取字符串
函数定义:

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

参数列表:
string: 字符串,字符串向量。
start : 开始位置
end : 结束位置
str_sub(string, start = 1L, end = -1L) 提取子字符串
str_sub(string, start = 1L, end = -1L) <- value 替换子字符串
截取字符串。

txt <- "I am a little bird" str_sub(txt, 1, 4) # 截取1-4的索引位置的字符串 str_sub(txt, end=6) # 截取1-6的索引位置的字符串 
str_sub(txt, 6) # 截取6到结束的索引位置的字符串 
str_sub(txt, c(1, 4), c(6, 8)) # 分2段截取字符串 
str_sub(txt, -3) # 通过负坐标截取字符串 
str_sub(txt, end = -3) x <- "AAABBBCCC" #对截取的字符串进行赋值。 str_sub(x, 1, 1) <- 1; x ## 在字符串的1的位置赋值为1 
str_sub(x, 2, -2) <- "2345"; x ## 在字符串从2到-2的位置赋值为2345
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

Mina笑美

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值