在R
中处理字符串,stringr
包是最合适的包之一。
stringr
包中大多数函数接受2
个参数:要处理的字符串和正则表达式。
在学习stringr
包之前,我们可以看看R
中内建的处理字符串函数是如何使用正则表达式的。
在上一课中,我们一直使用grepl()
查看正则表达式是否与字符串匹配。grepl()
代表**grep
逻辑**。
> grepl("[Ii]", c("Hawaii", "Illinois", "Kentucky"))
[1] TRUE TRUE FALSE
还有一个老式的grep()
,它返回与正则表达式参数匹配的向量的索引。
> grep("[Ii]", c("Hawaii", "Illinois", "Kentucky"))
[1] 1 2
对字符串进行替换操作的时候,我们可以使用sub()
函数。sub()
接受3
个参数:
sub()
会替换匹配到的第一个结果。
> sub("[Ii]", "1", c("Hawaii", "Illinois", "Kentucky"))
[1] "Hawa1i" "1llinois" "Kentucky"
如上述代码所示,向量中每个元素被匹配到的第一个i
或I
被替换成了数字1
。
还有一个相似的函数gsub()
,它会替换所有匹配到的结果。
> gsub("[Ii]", "1", c("Hawaii", "Illinois", "Kentucky"))
[1] "Hawa11" "1ll1no1s" "Kentucky"
在学习stringr
之前,我们要讨论的最后一个函数是strsplit()
函数。这是一个分割字符串的函数。
> two_s <- state.name[grep("ss", state.name)]
> two_s
[1] "Massachusetts" "Mississippi" "Missouri" "Tennessee"
> strsplit(two_s, "ss")
[[1]]
[1] "Ma" "achusetts"
[[2]]
[1] "Mi" "i" "ippi"
[[3]]
[1] "Mi" "ouri"
[[4]]
[1] "Tenne" "ee"
现在到了stringr
的部分,stringr
是数据优先的,因此第一个参数基本是字符串,第二个参数才是正则表达式。这个包里的大多数函数以str_
开头。
首先介绍的是str_extract()
函数,这个函数会提取字符串中能匹配正则表达式的部分。
> str_extract("Camaro Z28", "[0-9]+")
[1] "28"
str_order()
函数会返回字符串向量排序后的索引。
> str_order(c("p", "e", "n", "g"))
[1] 2 4 3 1
例如上述代码中,排序后的向量顺序应该是e, g, n, p
,该函数返回的就是相应的元素索引。
str_pad()
函数用其他字符填充字符串,这在最终要将打印的字符串供人阅读时通常很有用。
> str_pad("Thai", width = 8, side = "left", pad = "-")
[1] "----Thai"
str_to_title()
函数类似于tolower()
和toupper()
的集合,是将字符串转成Title
的形式,即首字母大写,后面的字母小写。
> str_to_title(c("CAPS", "low", "Title"))
[1] "Caps" "Low" "Title"
str_trim()
函数的作用是去除字符串两侧的空格。
> str_trim(" trim me ")
[1] "trim me"
最后,使用word()
函数可以为字符串中的每个单词建立索引,并根据索引提取元素。就好像它是向量一样。
> word("See Spot run.", 2)
[1] "Spot"
主要是学习stringr
包中的几个常用函数。
本文首发于公众号:柠檬培养师(ID: yantinger90),欢迎关注!