R学习 第五篇:字符串操作
文本数据存储在字符向量中,字符向量的每个元素都是字符串,而非单独的字符。在R中,可以使用双引号,或单引号表示字符。
一,字符串中的字符数量
函数nchar()用于获得字符串中的字符数量:
> s <- 'read' > nchar(s) [1] 4
二,转义字符
R语言使用“\”,把特定的字符转义为特殊字符,例如 “\t”是制表符,换行符是“\n”,或者 “\r\n”,通常情况下,\r是回车符,把光标移动到当前行的开始,并覆盖当前行已经存在的数据,而\n是换行,把光标移动到一下行;
常用的转义字符是:使用两个“\\”,打印“\”;在字符串中包含双引号或单引号,使用“\"”,或“\'”;如果在双引号中使用单引号,或者在单引号中使用双引号,那么不需要对引号进行转义,R会打印引号。
三,更改字符的大小写
toupper()和tolower()函数,用于把字符串中的字符全部转换为大写或小写:
> toupper('Vic')
[1] "VIC"
> tolower('Vic')
[1] "vic"
四,拼接字符
函数paste()用于把不同的字符向量组合起来,传递的参数是字符向量,返回的数据类型是字符向量:
paste (..., sep = " ", collapse = NULL)
paste()函数按照向量元素的位置顺序,把向量中的元素拼接在一起,中间以sep参数(默认值是空格)分割,collapse参数用于把结果向量(字符向量)的各个元素折叠成一个单独的字符串,使用collapse指定的字符把结果向量的各个元素拼接在一起:
> paste(c('red','yellow'),'lorry') [1] "red lorry" "yellow lorry" > paste(c('red','yellow'),c('lorry','car')) [1] "red lorry" "yellow car" > paste(c('red','yellow'),c('lorry','car'),collapse=',') [1] "red lorry,yellow car"
五,截取字符串
substr或substring函数用于从字符串中截取子串,字符串的位置从1开始,
substr(x, start, stop) substring(text, first, last = 1000000L)
1,当start和stop是正整数时,substr和substring函数的行为是相同的:
> substr('R is free software',1,6) [1] "R is f" > substring('R is free software',1,6) [1] "R is f"
2,当start和stop是向量时,substr和substring函数的行为是不相同的:
> substring('R is free software',1:4,6:9) [1] "R is f" " is fr" "is fre" "s free" > substr('R is free software',1:4,6:9) [1] "R is f"
六,分割字符串
函数strsplit用于按照指定的字符把长的字符串分割成断的子字符串,
strsplit(x, split, fixed = FALSE)
参数split是用于分割字符串,当参数fixed为TRUE时,表示字符串完全匹配split分隔符;当fixed参数为FALSE时,表示参数split是包含正则表达式的字符,使用正则匹配。函数返回的结果是字符列表,一个列表项对应一个字符串。
> strsplit('ab,cd,ef',',') [[1]] [1] "ab" "cd" "ef"
七,格式化数字
format函数用于把数字(numeric)类型转换成字符类型,formatC函数使用C语言风格来指定输出的格式,而更通用的C风格的格式化函数是sprintf,第一个参数包含字符串或数字变量的占位符,其他参数逐个对应这些占位符,sprintf函数的占位符:
- %s:字符串
- %f:浮点型
- %d:整数
- %e :科学计数法
格式化函数的定义:
format(x, digits = NULL, nsmall = 0L) formatC(x, digits = NULL, format = NULL, flag = "") sprintf(fmt, ...)
参数注释:
- digits:是一个建议值,用于设置数字的总位数,包括小数点左边和右边;
- nsmall:小数位的数量;
- format:数字的格式,跟占位符相似: "d" (for integers), "f", "e", "E", "g", "G", "fg" (for reals), or "s" (for strings).
- flag:在数字前添加符号
例如,format函数和sprintf函数对数字格式化输出的结果是:
> format(1.3)
[1] "1.3"
> sprintf('%f, %d',1.3,1)
[1] "1.300000, 1"
八,stringr包
stringr包对字符串操作提供了一致的包装,使用R操作字符串,基本上使用该包提供的函数就够了,在使用之前,首先引用stringr包:
library(stringr)
1,字符串长度
str_length 函数计算字符串的长度
> str_length("vic") [1] 3
2,截取子串
str_sub函数用于截取子字符串,start和end用于指定子串的开始位置和结束位置,在end中,如果使用负数,表示从字符串的末尾向前计数。
str_sub(string, start = 1L, end = -1L)
例如,从字符串向量中截取子串:
> x <- c("abcdef", "ghifjk") > str_sub(x, 3, 3) [1] "c" "i" > str_sub(x, 3, -2) [1] "cde" "ifj"
3,字符的序号
获取字符向量中字符的序号
x <- c("y", "i", "k") str_order(x) #> [1] 2 3 1
4,对字符进行排序
x <- c("y", "i", "k") str_sort(x) #> [1] "i" "k" "y"
5,扩展字符串
str_pad(string, width, side = c("left", "right", "both"), pad = " ")
6,去掉字符串两端的空格
str_trim(string, side = c("both", "left", "right"))
7,转换大小写
str_to_upper(string, locale = "en") str_to_lower(string, locale = "en") str_to_title(string, locale = "en")
8,按照模式匹配
str_detect函数按照指定的模式查找字符串,返回逻辑值;str_subset返回匹配模式的字符串:
str_detect(string, pattern) str_subset(string, pattern) str_which(string, pattern)
9,分割字符串
str_split函数按照指定的模式分割字符串:
str_split(string, pattern, n = Inf, simplify = FALSE)
10,统计匹配模式的数量
str_count函数用于统计字符串中的指定字符的数量:
str_count(string, pattern = "")
11,替换字符
str_replace(string, pattern, replacement) str_replace_all(string, pattern, replacement)
详细信息,请阅读stringr包的官方文档:Introduction to stringr
参考文档: