在R语言中使用Stringr进行字符串操作
今天来学习下R中字符串处理操作,主要是stringr包中的字符串处理函数的用法。
先导入stringr包,library(stringr),require(stringr),或者stringr::函数名;这几种方式都行。
一、检测是否匹配
我们先定义一个字符串和变量,在此基础上演示各个函数基本用法。
1 library(stringr)
2 animal<-c("cow","dog","sheep","goat","pig","monkey","cat","cat")
3 str1<-"I love cat, cat cat !"
4 str2<-"lovelovelove"
5
6 str_detect(animal,"cow") #匹配到指定字符串返回True,否则返回False
7 [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
8
9 str_detect(str1,"love")
10 [1] TRUE
11
12 str_which(animal,"dog") #返回指定字符串位置
13 [1] 2
14
15 str_which(animal,"cat")
16 [1] 7 8
17
18 str_which(str2,"love") #连续重复字符只返回第一个
19 [1] 1
20
21 str_count(animal,"cat") #返回匹配次数
22 [1] 0 0 0 0 0 0 1 1
23
24 str_count(str1,"cat")
25 [1] 3
26
27 str_locate(animal,"cat") #返回匹配起始位置
28 start end
29 [1,] NA NA
30 [2,] NA NA
31 [3,] NA NA
32 [4,] NA NA
33 [5,] NA NA
34 [6,] NA NA
35 [7,] 1 3
36 [8,] 1 3
37
38 str_locate(str1,"cat")
39 start end
40 [1,] 8 10
41
42 str_locate(str2,"love") #连续重复字符值返回第一个字符起始位置
43 start end
44 [1,] 1 4
45
二、子串提取
1 str_sub(str1,1,3) # 后面两个参数为起始,结束位置
2 [1] "I l"
3
4 str_sub(str1,1) # 可以只跟起始位置,默认到结束位置
5 [1] "I love cat, cat cat !"
6
7 str_sub(str1,3)
8 [1] "love cat, cat cat !"
9
10 str_sub(str1,-5) #位置还可以为负数
11 [1] "cat !"
12
13 str_sub(str1,-5,-1)
14 [1] "cat !"
15
16 str_subset(str1,"a") #匹配到指定字符就返回整个字符串
17 [1] "I love cat, cat cat !"
18
19 str_subset(str1,"x") #匹配不到则返回空
20 character(0)
21
22 str_extract(str1,"cat") #返回第一个匹配到字符串
23 [1] "cat"
24 str_extract(str1,"ca")
25 [1] "ca"
26
27 str_extract_all(str1,"cat") #返回所有匹配到字符串 列表形式返回
28 [[1]]
29 [1] "cat" "cat" "cat"
30
31 str_extract_all(str1,"[aoe]") #返回所有匹配到字符串 列表形式返回
32 [[1]]
33 [1] "o" "e" "a" "a" "a"
34
35 str_match(str1,"cat") #返回第一个匹配到字符串 矩阵形式返回
36 [,1]
37 [1,] "cat"
38
39 str_match_all(str1,"cat") #返回所有匹配到字符串 矩阵形式返回
40 [[1]]
41 [,1]
42 [1,] "cat"
43 [2,] "cat"
44 [3,] "cat"
45
46 str_match_all(str2,"love")
47 [[1]]
48 [,1]
49 [1,] "love"
50 [2,] "love"
51 [3,] "love"
52
53 str_match(str2,"love")
54 [,1]
55 [1,] "love"
56
57 str_match_all(str1,"(I|cat)") #可以多个匹配,不过这个返回结果我没看懂
58 [[1]]
59 [,1] [,2]
60 [1,] "I" "I"
61 [2,] "cat" "cat"
62 [3,] "cat" "cat"
63 [4,] "cat" "cat"
三、字符串长度处理
1 str_length(str2) # 返回字符串长度
2 [1] 12
3
4 str_length("good job !") # 空格也算一个字符长度
5 [1] 10
6
7 str_trunc(str2,4) #指定字符串替换成替他字符,
8 [1] "l..."
9
10 str_trunc(str2,4,ellipsis = "*") #ellipsis 指定替换符
11 [1] "lov*"
12
13 str_trunc(str2,width = 8,ellipsis = "#") #width指定长度,此处指前8个字符
14 [1] "lovelov#"
15
16 str_trunc(str2,width = 8,side = c("left"),ellipsis = "#") # side指定方向(right,center,left)
17 [1] "#ovelove"
18
19 str_trim("sssss\n") # 去掉字符串首尾空字符,换行,空格等;字符串内部空字符无法去除
20 [1] "sssss"
21 str_trim(" sssss\n")
22 [1] "sssss"
四、字符串替换
1 str1
2 [1] "I love cat, cat cat !"
3
4 str_sub(str1,1,6) #提取子串
5 [1] "I love"
6
7 str_sub(str1,1,6)<-"she love" #子串替换
8 str1
9 [1] "she love cat, cat cat !"
10
11 str_sub(animal,1,1)<-"F" #向量替换也可以
12 animal
13 [1] "Fow" "Fog" "Fheep" "Foat" "Fig" "Fonkey" "Fat"
14 [8] "Fat"
15
16 str1<-"I love cat, cat cat !"
17
18 str_replace(str1,"cat","dog") #替换第一个匹配项
19 [1] "I love dog, cat cat !"
20
21 str_replace_all(str1,"cat","dog") # 替换所有匹配项
22 [1] "I love dog, dog dog !"
23
24 str_to_lower(str1) # 全部转为小写字母
25 [1] "i love cat, cat cat !"
26
27 str_to_upper(str1) # 全部转为大写字母
28 [1] "I LOVE CAT, CAT CAT !"
29
30 str_to_title(str1) # 单词首字母转为大写
31 [1] "I Love Cat, Cat Cat !"
32
33 str_to_title(str2)
34 [1] "Lovelovelove"
35
五、字符串分割和连接
1 str_c(str1,str2,sep="+") # 字符串连接
2 [1] "I love cat, cat cat !+lovelovelove"
3
4 str_c(animal,str2,sep="+") #向量一次连接字符串
5 [1] "Fow+lovelovelove" "Fog+lovelovelove" "Fheep+lovelovelove"
6 [4] "Foat+lovelovelove" "Fig+lovelovelove" "Fonkey+lovelovelove"
7 [7] "Fat+lovelovelove" "Fat+lovelovelove"
8
9 str_c(animal,sep="",collapse = "+") # 向量字符串连接
10 [1] "Fow+Fog+Fheep+Foat+Fig+Fonkey+Fat+Fat"
11
12 str_dup(str1,2) #字符串重复,数字代表次数
13 [1] "I love cat, cat cat !I love cat, cat cat !"
14 str_dup(str2,3)
15 [1] "lovelovelovelovelovelovelovelovelove"
16
17 str_split_fixed(animal,"",n=2) #分割字符串,分隔符,n=分割份数,返回矩阵
18 [,1] [,2]
19 [1,] "F" "ow"
20 [2,] "F" "og"
21 [3,] "F" "heep"
22 [4,] "F" "oat"
23 [5,] "F" "ig"
24 [6,] "F" "onkey"
25 [7,] "F" "at"
26 [8,] "F" "at"
27
28 str_split_fixed(str2,"",n=4)
29 [,1] [,2] [,3] [,4]
30 [1,] "l" "o" "v" "elovelove"
31
32 str_split(str2,"",4) # #分割字符串,分隔符,n=分割份数,返回列表
33 [[1]]
34 [1] "l" "o" "v" "elovelove"
35
36 str_glue("pi is {str1}") # 字符串连接变量,{}花括号内是系统变量
37 pi is I love cat, cat cat !
38
39 str_glue("pi is {pi}")
40 pi is 3.14159265358979
41
42 str_glue("log2(8) is {log2(8)}")
43 log2(8) is 3
44
45 str_glue_data(mtcars, "{rownames(mtcars)} has {hp} hp") #数据框或列表对应行连接字符串
46 Mazda RX4 has 110 hp
47 Mazda RX4 Wag has 110 hp
48 Datsun 710 has 93 hp
49 Hornet 4 Drive has 110 hp
50 Hornet Sportabout has 175 hp
51 Valiant has 105 hp
52
53 str_glue_data(mtcars, "{rownames(mtcars)} has {hp*1000} hp") # 话可以做相应计算
54 Mazda RX4 has 110000 hp
55 Mazda RX4 Wag has 110000 hp
56 Datsun 710 has 93000 hp
57 Hornet 4 Drive has 110000 hp
58
59 str_glue_data(mtcars, "{rownames(mtcars)} has {substr(wt,1,2)} wt") # 子串分割
60 Mazda RX4 has 2. wt
61 Mazda RX4 Wag has 2. wt
62 Datsun 710 has 2. wt
63 Hornet 4 Drive has 3. wt
六、字符串排序
1 str2
2 [1] "lovelovelove"
3 str_order(str2,decreasing = T) # 返回字符串下标
4 [1] 1
5
6 animal
7 [1] "Fow" "Fog" "Fheep" "Foat" "Fig" "Fonkey" "Fat"
8 [8] "Fat"
9 animal[str_order(animal,decreasing = T)]
10 [1] "Fow" "Fonkey" "Fog" "Foat" "Fig" "Fheep" "Fat"
11 [8] "Fat"
12
13 animal
14 [1] "Fow" "Fog" "Fheep" "Foat" "Fig" "Fonkey" "Fat"
15 [8] "Fat"
16 str_sort(animal) #直接对向量字符串排序
17 [1] "Fat" "Fat" "Fheep" "Fig" "Foat" "Fog" "Fonkey"
18 [8] "Fow"
19
在R语言中使用Stringr进行字符串操作的更多相关文章
- 【R语言入门】R语言中的变量与基本数据类型
说明 在前一篇中,我们介绍了 R 语言和 R Studio 的安装,并简单的介绍了一个示例,接下来让我们由浅入深的学习 R 语言的相关知识. 本篇将主要介绍 R 语言的基本操作.变量和几种基本数据类型 ...
- R语言中的字符处理
R语言中的字符处理 (2011-07-10 22:29:48) 转载▼ 标签: r语言 字符处理 字符串 连接 分割 分类: R R的字符串处理能力还是很强大的,具体有base包的几个函数和strin ...
- R+openNLP︱openNLP的六大可实现功能及其在R语言中的应用
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- openNLP是NLP中比较好的开源工具,R语 ...
- R语言中知识点总结(二)
一些函数不知道什么意思要查,看数值例子,做笔记,知道函数的功能,函数和返回值. 网页上查找关键词,巧用查找(ctrl+F) 数据读取处理,有read.table read R-读取数据(导入csv ...
- R语言:变量名称和字符串的转换
R语言:变量名称和字符串的转换 2014-06-23 14:45:27 在R语言中,经常会遇到变量名称和字符串相互转换的问题.比如说,进行1000次循环运算,并将运算结果存储在1000 ...
- R语言中的数据处理包dplyr、tidyr笔记
R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了 ...
- R语言学习笔记1——R语言中的基本对象
R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的Ross Ihaka和Robert Gentleman开发(也因此称为R),现在由“R开发核心 ...
- R语言中的正则表达式(转载:http://blog.csdn.net/duqi_yc/article/details/9817243)
转载:http://blog.csdn.net/duqi_yc/article/details/9817243 目录 Table of Contents 1 正则表达式简介 2 字符数统计和字符翻译 ...
- 机器学习:R语言中如何使用最小二乘法
详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下:(数据同 ...
随机推荐
- 百度OCR技术博客
百度OCR工具链使用 百度OCR的API使用总体来说比较容易,主要步骤为:注册云平台并登录,选择服务并创建应用,保存API Key以及Secret Key,选择调用API. 注册登录百度云平台 首先需 ...
- [对对子队]团队任务拆解Alpha
Alpha阶段主要目标 完成游戏场景的基本实现(不要求美术资源) 完成游戏UI的基本实现(不要求美术资源) 制作第一部分的关卡(顺序语句,制作3-5关) 完成第一部分关卡和游戏基本逻辑的测试 任务分解 ...
- STM32必学的时钟系统
STM32的时钟系统 相较于51单片机,stm32的时钟系统可以说是非常复杂了,我们现在看下面的一张图: 上图说明了时钟的走向,是从左至右的从时钟源一步步的分配给外设时钟.需要注意的是,上图左侧一 ...
- 笔记本加装SSD并装系统
1,首先了解笔记本配置信息 一般加装SSD都是120~256左右,并使用原有的机械硬盘:首先确定加装位置:1,是否支持M.2接口:假如支持,可以直接购买,拆机装上:我的笔记本不支持:所以考虑2,光驱的 ...
- 清除行列 牛客网 程序员面试金典 C++ Python
清除行列 牛客网 程序员面试金典 C++ Python 题目描述 请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零. 给定一个N阶方阵int[]mat和矩阵的阶数n,请返回完成操作后的 ...
- POJ 2584 T-Shirt Gumbo(二分图最大匹配)
题意: 有五种衣服尺码:S,M,L,X,T N个人,每个人都有一个可以穿的衣服尺码的范围,例:SX,意思是可以穿S,M,L,X的衣服. 给出五种尺码的衣服各有多少件. 如果可以满足所有人的要求,输出 ...
- OpenAPITools 实践
OpenAPITools 可以依据 REST API 描述文件,自动生成服务端桩(Stub)代码.客户端 SDK 代码,及文档等.其是社区版的 Swagger ,差异可见:OpenAPI Genera ...
- 解决mac主机无法与 Docker容器互通问题
方法很多,这里我说一下使用 docker-connector解决这个问题 这是一个github开源项目docker-connector 1. Mac 通过 brew 安装 docker-connec ...
- PTA 7-2 畅通工程之局部最小花费问题 (35分)
PTA 7-2 畅通工程之局部最小花费问题 (35分) 某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出"畅通工程"的目标:使整个地区任何两个城镇间都可以实 ...
- js深拷贝你还不会吗
js深拷贝 在讲正题之前我们要先了解数据存储的方式 数据存储方式 在讲之前我们要先知道值类型和引用类型的存储方式. 在JavaScript数据类型中有两种数据类型. 值类型:字符串(String).数 ...