R非数据型数据

字符

创建字符
创建字符使用双引号,在R中用双引号引起来的字符长度只有1,若要计算具体的单独字符则需要使用nchar()函数,但注意的是空格也算是一个单独字符。

> f<-"I am a pig"
> length(f)
[1] 1
> nchar(f)
[1] 10

此外字符可以进行比较大小,

  • 按照字母表,后面的字母大
  • 大写字母大于小写字母

字符的连接
在R中,可以使用cat()函数和paste()函数进行连接字符串。
但cat()函数只会显示出结果,而paste()函数在显示的同时会将最终的字符串输入到控制台进行保存。
调用格式为cat(多个字符,sep=""); paste()同

  • sep为字符序列间的间隔,可在双引号内设置为空格及各种符号

转义序列
转义序列可以让字符串的显示更加灵活,具体作用如下例:

> cat("I am\na\npig")
I am
a
pig
> cat("I am\n\ta\npig")
I am
	a
pig
> cat("I am\n\ta\n\tpig")
I am
	a
	pig

字符串中常用的转义序列:

转义序列结果
\n换行
\t水平制表
\b调用退格
\反斜杠
"双引号

子集与匹配
在R中可使用substr()函数和gsub()函数,调用格式为
substr(字符名,start=,stop=);
该调用方法需要替换字符数和原本字符数相同
当替换字符数不等于原本字符数时,调用格式为
substr(pattern="",replacement="",x=字符名)

  • pattern,原本字符,即需要替换的字符
  • replacement,替换后的字符

但substr()函数只会寻找位置最靠前的一个字符串进行替换,gsub()函数则会替换含有pattern的每一个字符串

> bar<-"how much wood could a woodchuck chuck"
> sub(pattern = "chuck",replacement = "AAA",bar)
[1] "how much wood could a woodAAA chuck"
> gsub(pattern = "chuck",replacement = "AAA",bar)
[1] "how much wood could a woodAAA AAA"

因子

创建因子
因子代表了不同类别的有限数据,而非用于表示连续数据。如性别(男、女)可设置为因子。而数字和字符串都可以作为因子的内容。同时需要注意不可以用因子填充矩阵或是多维数组,因子只能是向量形式。使用factor()函数可以创建因子向量,同时可以使用level参数进行标记因子内水平。

> 性别<-c(0,1,1,1,1,0,1,1,1,0)
> sex.fac<-factor(性别)
> sex.fac
 [1] 0 1 1 1 1 0 1 1 1 0
Levels: 0 1
> levels(sex.fac)<-c("1","2")
> sex.fac
 [1] 1 2 2 2 2 1 2 2 2 1
Levels: 1 2

排序问题
因子排序的规则同字符串,按照字母表进行排序,但可以通过levels和orderd参数进行重新定义。

> mob<-c("Apr","Jan","Dec","Sep","Nov","Jul","Jul","Jun")
> ms<-c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")
> mob.fac<-factor(mob,levels = ms,ordered = TRUE)
> mob.fac
[1] Apr Jan Dec Sep Nov Jul Jul Jun
Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < Oct < Nov < Dec

因子分割
在R中可使用cut()函数分割因子,调用格式为cut(数据名,break=,right=,labels=)

  • break,分组赋值
  • right=TRUE,(a,b]
  • right=FALSE,[a,b)
  • include.lowest=TRUE,将最大值划入最高水平内
  • labels,添加分组标签
> x<-c(0.53,5.4,1.5,3.33,0.45,0.01,2,4.2,1.99,1.01)
> br<-c(0,2,4,6)
> cut(x,breaks = br,right = FALSE)
 [1] [0,2) [4,6) [0,2) [2,4) [0,2) [0,2) [2,4) [4,6) [0,2) [0,2)
Levels: [0,2) [2,4) [4,6)
> labs<-c("small","medium","large")
> cut(x,breaks = br,right = FALSE,include.lowest = TRUE,labels = labs)
 [1] small  large  small  medium small  small  medium large  small  small 
Levels: small medium large

练习题

> #练习4.4
> #a.存储数值numl<-4和num2<-0.75,写一串代码使得R返回以下字符串
> #The result of multiplying 4 by 0.75 is 3
> numl<-4
> num2<-0.75
> cat("The result of multiplying",numl,"by",num2,"is 3")
The result of multiplying 4 by 0.75 is 3> #b.存储bar<-"how much wood could woodchuck chuck"
> bar<-"how much wood could woodchuck chuck"
> #bi.将bar和"if a woodchuck could chuck wood"粘贴在一起得到新的字符串
> bi<-paste(bar,"if a woodchuck could chuck wood")
> #bii.在bi的结果中,用metal代替所有的wood
> gsub(pattern="wood",replacement="metal",bi)
[1] "how much metal could metalchuck chuck if a metalchuck could chuck metal"
> #c.存储字符串"Two 6-packs for $16.99"
> c<-"Two 6-packs for $16.99"
> #ci.使用等号来检查第五个字符到第十个字符之间是否为"6-pack"
> substr(c,start=5,stop=10)=="6-pack"
[1] TRUE
> #cii.通过将价格改为$10.99,使其成为一个刚好的交易
> substr(c,start=c(nchar(c)-4),stop=c(nchar(c)))<-"10.99"
> c
[1] "Two 6-packs for $10.99"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值