使用字符向量
为字符向量赋值
nchar()函数返回文本中的字符数,length()返回字符向量的长度
>x<-"hello world"
>is.character(x) #检测变量是否为character类型
[1] TRUE
>length(x)
[1] 1
>nchar(x)
[1] 12
绘制包含多个元素的字符向量
>x<-c("hello","world")
>length(x)
[1] 2
>nchar(x)
[1] 5 6
获取向量的子集
内置的letters和LETTERS分别包含26个字母的大小写。
获取letters的第10个元素。
>-letters[10]
获取LETTERS的最后三个元素。
>LETTERS[24:26]
使用tail()函数显示向量尾部,head()函数显示向量头部;默认显示6个。
head/tail(vector,num) 与linux中的类似
为向量中的值命名
首先查看内置数据集islands的结构。
能看到islands中包含48个numeric向量,并且这个向量有names属性即均为命名向量。
用名称提取前三个面积。
>islands[c("Africa","Antarctic","Asia")]
使用names函数来获得命名向量的名称
获取世界最大的6个岛屿的名称。
names([sort(islands,decreasing=TRUE)[1:6])
创建命名向量并赋值
格式names(vector)<-c( )
>month.day<-c(31,28,31,30,31,30,31,31,30,31,30,31)
>names(month.day)<-month.name #内置数据集month。name作为月份名称
>names(month.day[month.day==31]) #找到包含31天的月份
文本操作
组合和分割字符串
strsplit(vector,sep=" ") 分割字符串函数;sep指定分割符
[[1]]表示接下来打印的是列表的第一个元素,将结果赋值给一个words向量。
获取由唯一元素构成的向量要用unique()函数
unique(tolower(words))
>tolower(words) #转换为小写
>toupper(words) #转换为大写
连接字符串
paste(vector,sep=" ",collapse=) 组合字符串函数;sep参数指定多个向量之间的连接符;collapse参数指定同一个向量间的连接符
文本排序
sort(vector,decreasing=)
要用R实现逆序字母表,decreasing=TRUE指定降序排列。
查找文本中包含的内容
位置检索单个字符
substr(vector,start=,stop=)提取向量每个元素从第start个位置开始到第stop位置结束的子串
模式索取字符
grep(pattern,vector)返回符合的索引值
想找到所有包含单词“New”的洲
想要返回洲名,而不是索引值
>state.nama[grep("New",state.name)]
>grep("New",state.name,value=TRUE)
#添加参数value=TRUE
检索多个单词(判断是否包含空格)
grep(" ",state.name,value=TRUE)
文本替换
sub()用于文本对文本的替换;gsub()可以实现所有特定模式的替换
gsub(查找的模式,替换的模式,被修改的文本)
假设有3个文件名file_a.csv 、file_b.csv 、file_c.csv提取其中的a、b、c
>file<-c("file_a.csv","file_b.csv","file_c.csv")
>y<-gsub("file_","",file)
>gsub("\\.csv","",y) # \\是转义符,但是不加也能成功转换(?)
使用正则表达式
可选性:|
可分组性:()
可计数型:* +
使用因子进行分类
创建因子
levels是创建因子的输入值;labels是创建因子的输出值。
factor(x,levels=,labels=)
转换因子
as.numeric(factor)会返回各个元素值在levels的顺序值
解决方法:as.numeric(as.character(factor))
关注水平
查看内部结构str(factor)
state.region是包含4个元素的因子。水平均以整数1 2 3 4来表示。
查看因子水平levels(factor)
查看因子水平数nlevels(factor)
修改因子水平levels(factor)<-c(val1,val2...)
使用有序因子
使用指定参数ordered=TRUE的factor函数
factor(x,levels= ,labels= ,ordered=TRUE)
#假定要表示五个项目的优先级状态
>status<-c("Lo","Hi","Med","Med","Hi")
>ordered.status<-factor(status,levels=c("Lo","Med","Hi"),ordered=TRUE)
有序因子和普通因子的区别:R会保留有序因子的固有顺序。用table()函数试验一下。