【R语言】字符串处理

本文详细介绍了R语言中字符串处理的各种方法,包括基本字符操作、字符串连接、字符匹配、字符串提取/替换/拆分、字符编码转换以及使用stringr包进行高级操作。通过实例演示了如length、nchar、toupper、tolower、paste、paste0、sprintf、cat、grep、regexpr等功能,以及str_count、str_length、str_to_upper、str_c、str_match、str_extract等stringr包中的函数,是学习和提升R语言字符串操作的重要参考资料。
摘要由CSDN通过智能技术生成

        在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台,虽然文本的处理并不是它的强项, 但是R语言还是包含大量的字符串操作工具,本章着重整理了部分常用字符处理函数及其使用方法。


5.1 基本字符操作

1) 字符长度统计

length(x)函数 — 返回向量x的长度,或者说向量中元素的个数;

nchar(x)函数  — 返回向量x中的每个元素的字符个数,对于非字符元素会得到不可预料的结果。

–       举例1:

x <-c("R", "Rstudio", "Revolution R")

# 返回3,向量x中共有3个元素

length(x)

# 返回1 7 12,向量x中每个元素的字符个数

nchar(x)

 

–       举例2:

# 返回1,空向量长度为1

length("")

# 返回0,空向量字符长度为0

nchar("")

# 非字符元素NA,返回错误结果2

nchar(NA)

 

2) 字符大小写转换

toupper(x)函数 — 将字符矩阵x内各元素转化为大写形式;

tolower(x)函数 — 将字符矩阵x内各元素转化为小写形式;

casefold(x,upper = FALSE)函数 — 将字符矩阵x内各元素转化为大写或小写形式,默认为转换为小写,当upper =TRUE时转换为大写;

–        举例1:

x <- c("r", "rstudio", "revolutionR", NA)

# 转化x中的各元素为大写形式,NA依然返回NA

toupper(x)

# 转化x中的各元素为小写形式,NA依然返回NA

tolower(x)

# 转化x中的各元素为小写形式,默认upper = FALSENA依然返回NA

casefold(x)

# 转化x中的各元素为大写形式,设置upper = TRUENA依然返回NA

casefold(x, upper = TRUE)


5.2 字符串连接

字符串连接是较为常见的字符操作,在此R提供了强大的paste函数,它不仅可以实现字符串的连接,也可以实现字符向量的连接,无论是字符向量还是字符串,在连接前paste会把对象首先转换为字符而后进行连接,另外,当向量连接时,较短的向量会循环使用。

1) paste 函数 

基本语法:

paste (..., sep = " ", collapse = NULL)  

参数sep表示连接的分隔符,默认为一个空格,参数collapse作为合并成一个字符串时的分隔符,详情请见以下应用实例:

–        举例1:

x <- "Hello"; y <- "world"

paste(x, y)

#不设置sep,默认以空格分割

paste("A", 1:4) 

#设置sep,去掉空格分隔符

paste("A", 1:4, sep = "")

 

–        举例2:

#字符向量的连接,较短的字符循环被使用

paste(c("a", "b"), 1:3, sep = "")

 

–        举例3:

#连接前隐式转换为字符串

name <- c("Kingsley", "William","Tom");

age <- c(30, 20, 10); 

person <- data.frame(name, age)

#返回结果"NJc(1,3, 2)"    "NJc(30, 20,10)"

paste("NJ", person, sep ="") 

注: 数据框内的字符串会默认转换为因子(依赖于stringsAsFactors参数的设置,默认为True,即字符会被转换为因子类型),然后paste连接的时候会进行隐式转换,默认转换为字符型连接,所以使用paste函数时,有时候并不能得到想要的结果。

 

–        举例4:

#使用collapse参数, collapse的使用可使连接后的字符组成一个字符串

#返回字符串A1,A2,A3,A4

paste("A", 1:4, sep ="" ,collapse = ",")

 

2) paste0 函数

基本语法:

paste0(..., collapse = NULL)  

参数意义paste与函数相同, 不同之处在于sep默认设置为空字符。

–        举例1:

#结果中没有空格分隔符

paste0("A", 1:4)  

 

3) sprintf函数

基本语法:

sprintf(fmt,...)

sprintf表示字符串“打印”,把若干元素按照给定的格式组合赋值给字符串。fmt表示包含格式字符的字符向量,sprintf中的参数会循环使用。

–        举例1:

#以固定长度输出月份的名称,fmt被循环使用,长度不足在字符前面补空格

sprintf("%09s", month.name)

#以固定长度输出月份的名称,fmt被循环使用,长度不足在字符后面补空格

sprintf("%-9s", month.name)

 

–        举例2:

#向量元素按顺序组合

sprintf(c("Name:%s", "Age: %s"), c("Kingsley", "30"))

 

–        举例3:

#以指定格式输出圆周率

sprintf("%f",pi)

sprintf("%.3f",pi)

sprintf("%1.0f",pi)

sprintf("%5.1f",pi)

sprintf("%05.1f",pi)

sprintf("%+f",pi)

sprintf("%f", pi)

sprintf("%-10f",pi) # left justified

sprintf("%e",pi)

sprintf("%E",pi)

sprintf("%g",pi)

sprintf("%g",   1e6 * pi) # -> exponential

sprintf("%.9g",1e6 * pi) # -> "fixed"

sprintf("%G",1e-6 * pi)

 

4) cat函数

基本语法:

cat(... , file ="", sep = " ", fill = FALSE, labels = NULL,

    append = FALSE)

cat函数用于连接字符串并输出到文件,默认file为空直接输出;sep表示连接的分隔符,默认为一个空格;fill逻辑值,为FALSE只有显式地使用“\n”才会换行输出,为TRUE只要达到选择宽度即可换行;labels为行标签,只在fill = TRUE时有效,若设定的行数小于实际行数,则会循环使用。append逻辑值,为FALSE会覆盖之前的输出,否则在原来内容后添加新输出。

–        举例1:

#连接字符串,此处A不会循环使用

cat("A", 1:4, sep= " ")

 

–        举例2:

#换行输出到文件abc.txt,每行都有相应的行标签

cat(paste(letters, 100*1:26), file = "abc.txt", fill = T, labels = paste0("{",1:10, "}:"))


5.3 字符匹配

R语言有多重方法判断特定元素(vector)在另一个元素(vector)中是否存在匹配的元素。下面逐一介绍各种方法:

1.    match函数族

match函数族用于匹配字符时返回匹配或部分匹配的元素下标,匹配参数不支持正则表达式。

1)    match函数

基本语法:

match(x, table,nomatch = NA_integer_, incomparables = NULL)

 其中参数nomatch表示不匹配时的返回值(默认为NA,强制为integer型),incomparables指定不能用来匹配的值(vector),因此incomparables中配置的值,即使x在table中得到匹配也会由nomatch代替。match函数要求完全匹配

–       举例1:

#return 2,字符mn匹配字符向量第二个元素的值

match("mn",c("ab", "mn", "xy"), nomatch = NA)

 

–       举例2:

#return 1,字符mn匹配字符向量第一以及第二个元素的值,返回第一个元素下标

match("mn",c("mn", "mn", "xy"), nomatch = NA)

 

–       举例3:

#return NAincomparables包含了字符值mn,因此即使匹配也返回NA

match("xy",c("ab", "mn", "xy"), nomatch = NA,incomparables = c("mn", "xy"))

 

函数%in%,实际可表示为match函数,不同的是返回值为逻辑向量

"%in%"<- function(x, table) match(x, table, nomatch = 0) > 0

–       举例1:

#返回长度为10的逻辑向量,存在的为TRUE,不存在为FALSE

1:10 %in%c(1,3,5,9)

 

–       举例2:

#返回sstr中存在于26个字符中的元素,包括大小写

sstr <-c("c","ab","B","bba","c",NA,"@","bla","a","Ba","%")

sstr[sstr %in%c(letters, LETTERS)]

 

2)    pmatch函数

基本语法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值