【3.3.5】gsub—替换数据

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE)

一、百分数的因子变为数字

得到这样一组数据,每个分类指标后面都跟有一个该指标的可信度的分数,现在就是根据这个打分,来确定保留的数据。

两种读入数据的方法写法:

方法1:

 arc<-read.csv("/sam/abd/arc_classified.csv",header=TRUE,sep="\t",quote="",comment.char="#",as.is = T);

方法2:

 arc<-read.csv("/sam/abd/arc_classified.csv",header=TRUE,sep="\t",quote="",comment.char="#")
 read.csv的一个特性是会自动地将非数值类型的数据视为因子(factor),即分类变量。但在某些情况下,也有可能确实需要字符串,而不是因子。把as.is参数设为TRUE即可,此时R就不会将分数值数据视为因子.
 comment.char="#" 忽略#的行,comment.char=""可以禁用。
 
 str(arc$family.n) #查看数据类型
 方法1读入的百分数为chr,方法2读入的百分数为factor
 
 > str(arc$family.n)
 Factor w/ 30 levels "100%","14%","21%",..: 1 1 28 22 30 5 1 1 12 1 ...
 factor不可以比较,但是chr是可以比较的,但是是字符串的比较,不是数字大小的比较。

所以需要去掉%

 arc$family.n<-gsub("%","",arc$family.n)
 > str(arc$family.n)
 chr [1:59] "100" "100" "97" "78" "99" "26" "100" "100" "52" "100" "76" "100" "87" ...

转化为数字型点的

 arc$family.n<-as.numeric(arc$family.n) # as.numeric只能处理向量
 > str(arc$family.n)
 num [1:59] 100 100 97 78 99 26 100 100 52 100 ...

提取里面的数据

 gg<-subset(arc,arc$family.n>70)

注意这里的subset出来的数据还是会保留原来数据的factor,

如果levels()的话,出来的还是原来的factor,可以重新定义其levels:

 aa$phylum <- factor(aa$phylum)

二 删掉括号

R语言中的括号往往代表函数的调用,要求上下游对应,并有相应的函数作基础。然而我们在处理字符串时,往往有些作为纯符号的括号。如果不经特殊处理当然达不到预期效果。

pps$order<-sub("(class)","",pps$order);
 pps$order<-gsub("\\(","",pps$order)
 pps$order<-gsub("\\)","",pps$order)

正确处理:在括号位置之前加两个 \\

参考资料:

http://blog.sciencenet.cn/blog-508298-628286.html

继续感谢Qq好友猎人的指导。

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn