R字符串处理1

统计

1 、字符数统计:nchar()

  • length空字符时计数为1
  • nchar空字符时计数为0
> x<-c("R","is","funny")
> nchar(x)
[1] 1 2 5
> length("")
[1] 1
> nchar("")
[1] 0

2 、转化为小写:tolower()

> DNA <- "AtGCtttACC"
> tolower(DNA)
[1] "atgctttacc"

3 、转化为大写:toupper()

> DNA <- "AtGCtttACC"
> toupper(DNA)
[1] "ATGCTTTACC"

4、替换函数:chartr("","",x)

chartr("A","B",x):字符串x中使用B替换A

> DNA <- "AtGCtttACC"
> chartr("Tt","Bb",DNA)
[1] "AbGCbbbACC"
> chartr("Tt","BB",DNA)
[1] "ABGCBBBACC"

字符串连接

5、字符串连接函数:paste()

> paste("Var",1:5,sep="")
[1] "Var1" "Var2" "Var3" "Var4" "Var5"

> x<-list(a='aaa',b='bbb',c="ccc")
> y<-list(d="163.com",e="qq.com")
> paste(x,y,sep="@")
[1] "aaa@163.com" "bbb@qq.com"  "ccc@163.com"

#增加collapse参数,设置分隔符
> paste(x,y,sep="@",collapse=';')
[1] "aaa@163.com;bbb@qq.com;ccc@163.com"
> paste(x,collapse=';')
[1] "aaa;bbb;ccc"

字符串拆分

6、字符串拆分:strsplit()

语法格式:strsplit(x, split, fixed = FALSE, perl = FALSE, useBytes = FALSE)

  • x为需要拆分的字串向量
  • split为拆分位置的字串向量,默认为正则表达式匹配(fixed=FALSE),
    设置fixed=TRUE,表示使用普通文本匹配或正则表达式的精确匹配。普通文本的运算速度快
  • perl=TRUE/FALSE的设置和perl语言版本有关,如果正则表达式很长,正确设置表达式并且使用perl=TRUE可以提高运算速度。
  • useBytes设置是否逐个字节进行匹配,默认为FALSE,即按字符而不是字节进行匹配。
  • strsplit得到的结果是列表,后面要怎么处理就得看情况而定了
> text<-"today is a \nnice day!"
> text
[1] "today is a \nnice day!"

> strsplit(text," ")
[[1]]
[1] "today"  "is"     "a"      "\nnice" "day!"

#换行符\n
> strsplit(text,'\\s')
[[1]]
[1] "today" "is"    "a"     ""      "nice"  "day!"
> class(strsplit(text, '\\s'))
[1] "list"

> strsplit(text,"")
[[1]]
 [1] "t"  "o"  "d"  "a"  "y"  " "  "i"  "s"  " "  "a"  " "  "\n" "n"  "i"  "c"  "e"  " "  "d"  "a" 
[20] "y"  "!"

字符串查询

7、字符串查询:grep(),grepl()

语法格式

grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, 
     fixed = FALSE, useBytes = FALSE, invert = FALSE) 
grepl(pattern, x, ignore.case = FALSE, perl = FALSE, 
      fixed = FALSE, useBytes = FALSE) 

两者的差别

  • grep正则匹配后返回匹配项的下标
  • grepl正则匹配后返回逻辑TRUE或者FALSE
> grep("\\.r$",files)
 [1]  3  5  8  9 10 11 12 16 18 20 22 24 25 26 29

 > grepl("\\.r$",files)
 [1] FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE
[17] FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE
[33] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

两者用于提取数据子集的结果是一样的

> files[grep("\\.r$",files)]
 [1] "agricolae.r"             "cluster.r"               "gam_model.r"            
 [4] "GBM.r"                   "gbm_model.r"             "gbm_model1.r"           
 [7] "GBM1.r"                  "item-based CF推荐算法.r" "MASS_e107_rpart.r"      
[10] "PankRange.r"             "quantmod.r"              "recommenderlab.r"       
[13] "Rplot.r"                 "rules.r"                 "survival.r" 

> files[grepl("\\.r$",files)]
 [1] "agricolae.r"             "cluster.r"               "gam_model.r"            
 [4] "GBM.r"                   "gbm_model.r"             "gbm_model1.r"           
 [7] "GBM1.r"                  "item-based CF推荐算法.r" "MASS_e107_rpart.r"      
[10] "PankRange.r"             "quantmod.r"              "recommenderlab.r"       
[13] "Rplot.r"                 "rules.r"                 "survival.r"

8、字符串查询:regexpr(),gregexpr(),regexec()

  • 匹配具体位置和字符串长度
  • 可以用于字符串的提取操作
> text<-c("Hello, Adam","Hi,Adam!","How are you,Adam")
> text
[1] "Hello, Adam"      "Hi,Adam!"         "How are you,Adam"
> regexpr("Adam",text)
[1]  8  4 13
attr(,"match.length")
[1] 4 4 4
attr(,"useBytes")
[1] TRUE
> gregexpr("Adam",text)
[[1]]
[1] 8
attr(,"match.length")
[1] 4
attr(,"useBytes")
[1] TRUE

[[2]]
[1] 4
attr(,"match.length")
[1] 4
attr(,"useBytes")
[1] TRUE

[[3]]
[1] 13
attr(,"match.length")
[1] 4
attr(,"useBytes")
[1] TRUE

> regexec("Adam",text)
[[1]]
[1] 8
attr(,"match.length")
[1] 4

[[2]]
[1] 4
attr(,"match.length")
[1] 4

[[3]]
[1] 13
attr(,"match.length")
[1] 4

字符串替换

9、字符串替换:sub(),gsub()

  • 严格地说R语言没有字符串替换的函数
  • R语言对参数都是传值不传址
  • sub和gsub的区别是前者只做一次替换,gsub把满足条件的匹配都做替换
> text<-c("Hello, Adam","Hi,Adam!","How are you,Ava")
> sub(pattern="Adam",replacement="word",text)
[1] "Hello, word"     "Hi,word!"        "How are you,Ava"
> sub(pattern="Adam|Ava",replacement="word",text)
[1] "Hello, word"      "Hi,word!"         "How are you,word"
> gsub(pattern="Adam|Ava",replacement="word",text)
[1] "Hello, word"      "Hi,word!"         "How are you,word"

字符串提取

  • substr和substring函数通过位置进行字符串拆分或提取,它们本身并不使用正则表达式
  • 结合正则表达式函数regexpr、gregexpr或regexec使用可以非常方便地从大量文本中提取所需信息
    语法格式
substr(x, start, stop) 
substring(text, first, last = 1000000L) 
  • 第 1个参数均为要拆分的字串向量,第2个参数为截取的起始位置向量,第3个参数为截取字串的终止位置向量
  • substr返回的字串个数等于第一个参数的长度
  • substring返回字串个数等于三个参数中最长向量长度,短向量循环使用
> x <- "123456789" 
> substr(x, c(2,4), c(4,5,8)) 
[1] "234" 
> substring(x, c(2,4), c(4,5,8)) 
[1] "234"     "45"      "2345678" 

因为x的向量长度为1,substr获得的结果只有1个字串,
即第2和第3个参数向量只用了第一个组合:起始位置2,终止位置4。
substring的语句三个参数中最长的向量为c(4,5,8),执行时按短向量循环使用的规则第一个参数事实上就是c(x,x,x),
第二个参数就成了c(2,4,2),最终截取的字串起始位置组合为:2-4, 4-5和2-8。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容

  • 在挖掘分析的过程当中对字符串的处理是极为重要的,且出现也较为频繁,R语言作为当前最为流行的开源数据分析和可视化平台...
    果果哥哥BBQ阅读 5,793评论 0 8
  • 1 、连接字符串:str_c() sep:连接两个字符之间插入的符号collapse:连接后,使用哪个字符分割 示...
    一刀YiDao阅读 484评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,212评论 0 4
  • 有一句话叫做时势造英雄,英雄造时势。那我这什么会有时势造英雄这一说法呢?世上叫我看的,为什么有时势造英雄的说法是因...
    天之巅海无涯阅读 330评论 0 0
  • 学习Docker @(存笔记) [TOC] For Win 官方建议使用 Docker Machines 的实现...
    潇Shawn纹阅读 412评论 0 0