字符串常用函数
is.character():判断是否是字符串;
nchar():有几个字符;
length():变量的长度
如下所示
|
|
内置数据集
R中有两个内置数据集,分别为LETTERS和letters,分别为大写字母和小写字母,如下所示:
字符串的连接和分离
字符串的分离strsplit()
strsplit()
函数用于分离字符串,如下所示:
|
|
运行结果如下所示:
|
|
字符串的连接paste()
字符串的连接用的是paste函数,如下所示:
在为某些数据添加新的一列,进行分组时,很有用,如下所示:
|
|
字符串连接的注意事项
以字符串的分离结果为数据进行连接,结果如下所示:
会发现字符之间出现的斜杠,原理如下:
因为分离后的字符串结果为列表(list),对列表直接用paste进行连接时,容易出现这种情况,因此要对列表的第1个元素进行连接才能避免这种情况。另外,在进行连接时主,要用于collapase参数,即用什么连接,案例中使用了空格与星号进行连接。
同时调用sep和collapse进行连接
以下面的这个例子中,先使用sep对不同向量进行连接,然后用collapse进行连接。
paste创建有规律的变量名
创造含有sample1-5的五个元素的向量:
字符的排序
排序用sort(),如果要倒序,则添加decreasing = TRUE
,如下所示:
查找文本
所用的案例是美国州的名字,数据集为state.name,如果要获取字符串的子字符串,则有2种方法,分别为:
- 通过位置:例如让R返回从第5个位置开始的紧接的第3个字母。
- 通过模式,例如返回匹配某个模式的子集。
通过位置查询
此函数为substr,现在返回state.name中各个元素的第3到第6的子字符串,如下所示:
通过模式查找匹配字符串
grep()函数可提取子字符串,它需要2个参数:
- pattern:想要查询的模式;
- x:被查询的向量。
需要注意的是grep()函数区分大小写
现在查找名称中含有“New”的州,如下所示:
返回的是数值变量,它表示的是元素的位置,例如:
可以直接返回元素,如下所示:
文本替换
sub()函数可以用于检索文本中的特定模式,并将其替换为其它的文本;
gsub()可以实现所有的替换功能,它的三个参数为:查找的字符串,替换的字符串与被修改的文本。
例如替换A real world is cute中的cute与ugly:
子字符串的提取案例之一:
一个向量,包含3个文件名,分别为file_a.csv,file_b.csv,file_c.csv,现在要提取这3个文件名中的a、b和c,需要用两个步骤,分别为:
- 将字符串“file_”替换为空格;
- 将“.csv”去掉,如下所示:
|
|
大小写转换toupper()与tolower()
所用到的函数是toupper()
与tolower()
,如下所示:
|
|
日期格式的创建
日期通常以字符串的形式输入到R中,然后转化为数值形式存储的日期变量,函数as.Date()用于执行这种转化,其语法为as.Date(x, "input_format")
,其中x是
字符型数据,input_format则是读入日期的适当格式。
其格式如下所示:
|
|
默认的日期格式为yyyy-mm-dd,语句为:
结果如下:
mydates <- as.Date(c(“2007-06-22”,”2004-02-13”))
mydates
[1] “2007-06-22” “2004-02-13”
str(mydates)
Date[1:2], format: “2007-06-22” “2004-02-13”
weekdays()函数
返回某个日期是星期几如下所示:
案例:
在leadership数据集中,日期是以mm/dd/yy的格式来表示的,现在将其转化为默认的yyyy-mm-dd格式,代码为:
当前日期
|
|
两个日期的相减
|
|
用difftime()来计算时间间隔,并以星期,天,时,分,秒来表示。
as.character(dates)用于将日期转化为字符型变量,其它与日期有关的函数可以查看help(as.Date),help(strftime),与日期有关的包为lubridate,复杂日期计算有关
的包为fCalendar。
格式化R代码format()与sprintf()
这一步通常是在计算了所有的数据之后进行的,主要用于输出一份报表,使输出的数据看起来比较整齐 ,例如我们可以设置小数点对齐,或指定固定的列宽,或者是添加一些货币符号,或百分号。
如果要实现上述功能,用到的函数就是format()
,它可以将数字变成美观的文本需要注意的是,此时数字会转换为文本,也就是转换为字符串,因此这一步要在最后一步进行。format()
的参数如下所示:
trim
:逻辑值。FALSE表示通过添加空格现实现文本的右对齐;TRUE会去掉前面的空格;digits
:控制显示的有效数字的个数;nsmall
:小数点后最少显示多少个数字;decimal.mark
:小数点的格式;big.mark
:设置小数点前整数部分的分段符;small.mark
:设置小数点后小数部分的分段符。
案例1:fromat()
输出小数
看一个案例,我们要输出一个数字12345.6789
,以逗号作为小数点
,空格作为整数部分的分段符
,点号
作为小数部分的分段符(分段则是3个数字作为一段),如下所示:
|
|
运行结果如下所示:
|
|
使用print()
函数时,也可以使用digits
参数,如下所示:
|
|
案例2:format()
输出列表
计算mtcars
中某几列的平均值,并且以两位小数的形式将其输出,如下所示:
|
|
运行结果如下所示:
|
|
案例3:sprintf()
添加百分号%
sprintf
是一种能够使用输出的字符以C语言的风格进行格式化,sprintf
的第一个参数包含字符串或数字变量的点位符,其他参数则将逐个代入这些占位符1。
如下所示:
|
|
运行结果如下所示:
|
|
解释一下:"%.1f %%", 100*y
是用来格式化字符串的,这在C与Python中很常见,这是告诉函数要将哪此部分远的为变量,%.1f
表示将传入的第一个值进行格式化,要求显示小数点后一位数字 ,%%
则是表示输出一个%
。
案例4:sprintf()
输出货币格式
输出货币格式只需要在sprintf()
函数中添加上一个$
符号即可,如下所示:
|
|
运行结果如下所示:
|
|
案例5:sprintf()
替换变量
再看一个sprintf()
函数的案例,这个在Python或C中会经常遇到:
|
|
运行结果如下所示:
|
|
formatC()
使用C语言风格格式化数字
formatC
可以使用C语言风格来输出字符串,可以指定使用固定型或科学型的格式,小数的位数以及输出的宽度,无论使用哪种选项,输入都应该是numeric类型(包括数组),输出的是character字符向量或数组,如下所示:
|
|
特殊字符
有一些特殊字符可以被以包含在字符中,例如我们可以通过\t
来插入一个制表符,下面我们使用cat()
函数来输出这种特殊字符,这里不使用print()
是因为print执行的额外转换动作会所制表符\t
转换成反斜框和一个t.
。cat的参数fill = TRUE
使光标在一行结束后移动到下一行,如下所示1:
|
|
使用\n
可以输出换行符,如下扬尘:
|
|
这里的转义字符与Python语言类似,不再多述。
文件路径
参考《数据的导入与导出》那篇笔记。
参考资料
- R语言轻松入门与提高 [法]Andrie de Vries ,[比利时]Joris Mey
1. 学习R.[美] Richard,Cotton 著刘军 译 ↩