我記了一個R視頻筆記-提示我該學(xué)哪些

1.R語言、Rstudio簡介

  • 11:50 CRAN官方網(wǎng)站
image-20191002135537331

Task views 比如我想做生存分析 但是我不知道生存分析哪些包可以做,這時我就可以在這里面找

向下拉可以看到有很多包,可以看到有的包后面帶有core字樣,這種為核心包

展示這個包的函數(shù)的用法及

  • 19:38 Rstudio網(wǎng)站的包
image-20191002150829525
  • 23:00推薦R網(wǎng)站

r-bolggers

Rdocumentation:包含cran、bioconductor 、github

中文網(wǎng)站:統(tǒng)計之都(可在網(wǎng)站中提問)

  • 27:00Rstudio基本設(shè)置

    • 功能區(qū)(主要是plots、packages、help三個工具框)
    • packages-install:可以安裝cran上的包或者已經(jīng)下載好的以.tgz和.tar.gz的包
      • install dependencies 是否安裝依賴包,如果不勾選,一些包的功能就無法實現(xiàn)
    • help上的幫助問答和在cran官網(wǎng)上看到的包的幫助文檔是一樣的
      • image-20191002154538382
  • 34:04Rstudio上的工具框

    • file:同左上角點擊+新建rscripts
    • import dataset :from csv\spss 等
    • tools:點擊global options
      • appearance
      • packages:鏡像問題 r語言在中國也是有鏡像的,因此不需要登錄到美國去,可以增加下包的速度
      • code:點擊saving:改變默認(rèn)字符編碼格式,改成UTF-8,為了方便我們以后讀入含有中文的數(shù)據(jù)集,防止出現(xiàn)亂碼
    • 改變四個框的排版問題
    image-20191002153214069
  • 保存問題

    • 如果是untitiled,退出后寫的代碼不會消失
    • 如果已經(jīng)點過保存,那么會讓你命名,如果接下來對代碼進行了修改,那么關(guān)掉時會詢問,如果點擊don‘t save,那么剛才修改了的代碼就不會保存下來,點擊save才會保存最后關(guān)掉時的代碼

2.R包的安裝、向量

  • 02:11R包安裝函數(shù) install.packages后面的r包名稱要是一個字符串,也就是加了''的

    • repos:傳入的鏡像地址可以提高下載r包速度
    • dependencies 邏輯參數(shù),默認(rèn)是設(shè)置為true的
    • installed.packages
    • 三種包來源:cran、bioconductor、github(devtools)
  • 10:47devtools幫助從github上下載包

    • devtools是擴展包,不是R的內(nèi)置包,使用前必須要加載
  • 16:00查看安裝的r包所在的位置 .libPaths()

  • 卸載包remove.packages()

  • 18:46向量

    • 賦值 <- =推薦前者

    • identical 可以用來判斷兩個向量是否一樣,只有全部(位置)一樣,才返回TRUE

      #根據(jù)向量位置,也就是位置
      vector <- 1:10
      vector[1:4] #1:4為1到4
      vector[-c(2,5,8)] #2,5,8是下標(biāo)
      vector2<-c(1,4,'ABC','nihao')#通過c函數(shù)將括號里面所有的封裝在一起
      
  • 思考題

    • x<-1:5
      y<-6:10
      x+y
      x<-1
      x+y
      

3.數(shù)值型、邏輯型向量

  • 1:20向量類型

    • 數(shù)值型向量:r語言中只有數(shù)值型,無整型intrger、浮點型floot的區(qū)分

    • 當(dāng)有y<-1:3,class(y),結(jié)果就是integer

    • seq

    • seq(from=1,to =5,by=0.5)
      seq(1,5,length.out=8)
      seq(1,5,len=-10)
      seq(1,5,along.with=1:3)
      
    • rep

    • rep(c(1,3),time=5)
      rep(c(1,3),each=5)
      rep(c(1,3),leng=9)
      
  • 19:09邏輯型

    • 非錯即對

    • logit<-c(100>99,100>101)
      
    • 進行邏輯判斷:'>' '<' '==' '!='

    • AND符號:& 必須全部滿足,才會返回true

    • c(100>90&100>100)
      [1]FALSE
      c(100>90&110>100)
      [1]TRUE
      

4.邏輯表達式&字符串向量

  • 00:50邏輯表達式

    • x<-seq(1,100,lenth.out = 20) #是一個均分的過程
      index<- x > 80#當(dāng)不知道下標(biāo)時,需要一個邏輯向量的概念
      x[index]#默認(rèn)取出true
      #也可以通過下標(biāo)來取出,如下
      which(x>80)
      x[which(x>80)]
      x[x>80&x<90]
      x[x>80|x<90]
      
  • 9:30 字符串

    • 用''包括

    • string<-c('abc','def',1,2)#1就不再是數(shù)值型,而是字符型
      class(string[3])
      [1] 'character'
      is.character(string)
      [1] TRUE
      
  • 12:16 letters/LETTERS都是向量

    • 目的:幫助在進行因子型操作時可以更簡潔生成分類變量

    • letters[1:5]
      [1]'a''b''c''d''e'
      LETTERS[24:28]
      [1]'X''Y''Z'NA NA
      
    • 上面的NA是因為沒有這個元素,用下標(biāo)提取時,由于沒有這個下標(biāo)的元素,就會產(chǎn)生NA

  • 15:40總結(jié)注意理解用[]+邏輯表達式進行元素的提取

5.因子型變量

  • 00:25也可以是分類變量

    • 男女、血型:無序型變量
    • 藥物是否有效:無效、有效、痊愈,有序型變量,因為是一個逐漸遞增的過程
  • 01:58在r中介紹

    • my_fac<-factor(x=c(1,2),times=5,leves=c(1,2),labels=c('male','female'))
      class(my_fac)
      
      my_fac2<-factor(LETTERS[1:5],labels = letters[1:5])
      my_fac3<-factor(1:5,labels = letters[1:5])
      my_fac4<-gl(n=2,k=5,labels = c('control','treatment'))
      my_fac5<-gl(n=2,k=1,length=8,labels = c('control','treatment'))
      
      temp_string<-c('A','B','AB','0')
      my_fac6<-as.factor(temp_string) #把temp_string變成因子
      my_fac6
      as.character(my_fac6)#互相轉(zhuǎn)換
      
      nlevels(my_fac6)#可以查看有幾個水平,通常結(jié)合as.factor使用
      [1] 4
      leves(my_fac6)
      [1]'A','B','AB','0'
      
  • 16:20 reference:得到的結(jié)果都要同reference來進行比較,就需要生成一個啞變量,就是這個reference

    • my_fac7<-relevel(my_fac6,ref='b')
      my_fac7
      [1]A B AB 0
      Levels:B A AB 0 #這里的levels就是講B設(shè)置為了reference,也就是啞變量,出現(xiàn)在第一位
      my_fac6
      [1]A B AB 0 #未設(shè)置前默認(rèn)A第一位是這個啞變量
      Levels:A B AB 0
      
  • 19:34 有序型因子變量

    • x<-c('0mg','10mg','20mg','50mg')
      my_order_fac<-factor(x,ordered=T)
      [1]0mg 10mg 20mg 50mg
      levels:0mg<10mg<20mg<50mg
      #有一個擴展包DescTools #的reorder函數(shù)
      x<-c('p','10mg','20mg','50mg')
      my_order_fac<-factor(x,ordered=T)
      my_order_fac
      [1] p 10mg 20mg 50mg
      levels:10mg<20mg<50mg<p
      library(DescTools)
      my_order_fac2<-reorder.factor(my_order_fac,new.order = x)
      [1] p 10mg 20mg 50mg
      levels:p<10mg<20mg<50mg
      

6.列表&矩陣

  • 1:15列表&矩陣

  • 2:10在r中生成列表

    • my_list<-list(1,2,3,'R','nihao',TRUE,FALSE)
      [[1]]
      [1] 1
      
      [[2]]
      [1] 2
      
      [[3]]
      [1] 3
      
      [[4]]
      [1] "R"
      
      [[5]]
      [1] "nihao"
      
      [[6]]
      [1] TRUE
      
      [[7]]
      [1] FALSE
      
      
  • 4:50從list中提取元素

    • > my_list2<-list(1:10,letters[1:5])
      > my_list2
      [[1]]
       [1]  1  2  3  4  5  6  7  8  9 10
      
      [[2]]
      [1] "a" "b" "c" "d" "e"
      > my_list2[1]
      [[1]]
       [1]  1  2  3  4  5  6  7  8  9 10
      
      > class(my_list2[1])
      [1] "list"
      > my_list2[[1]]
       [1]  1  2  3  4  5  6  7  8  9 10
      > class(my_list2[[1]])
      [1] "integer"
      > my_list2[[1]][3]
      [1] 3
      > my_list2[[2]]
      [1] "a" "b" "c" "d" "e"
      > my_list2[[2]][4]
      [1] "d"
      
  • 8:20 再建一個比較復(fù)雜的list,list可以包含list

    • my_list3 <- list(1:10,letters[1:5],list=(11:14,LETTERS[1:5]))
      #找到my_list3里的大寫A
      > my_list3<-list(1:10,letters[1:5],list(11:14,LETTERS[1:5]))
      > my_list3
      [[1]]
       [1]  1  2  3  4  5  6  7  8  9 10
      
      [[2]]
      [1] "a" "b" "c" "d" "e"
      
      [[3]]
      [[3]][[1]]
      [1] 11 12 13 14
      
      [[3]][[2]]
      [1] "A" "B" "C" "D" "E"
      
      
      > my_list3[[3]][[2]][1] #兩個[[]]可以取到下一層,一個[]還是list,往下取就是matrix
      [1] "A"
      
  • 11:40 矩陣

    • 是一個線性代數(shù)的一個概念

    • my_matrix<-matrix(data=1:6,nrow=2,brow=TRUE)#brow默認(rèn)是false,就是默認(rèn)是按列排列的
      my_matrix2<-matrix(data=1:10,nrow=5)
      > my_matrix3
           [,1] [,2] [,3] [,4]
      [1,]    2    2    2    2
      [2,]    2    2    2    2
      [3,]    2    2    2    2
      > my_matrix4<-matrix(data = letters[1:3], nrow = 2,ncol = 4)
      Warning message:
      In matrix(data = letters[1:3], nrow = 2, ncol = 4) :
        數(shù)據(jù)長度[3]不是矩陣行數(shù)[2]的整倍
      > my_matrix4
           [,1] [,2] [,3] [,4]
      [1,] "a"  "c"  "b"  "a" 
      [2,] "b"  "a"  "c"  "b" 
      > my_matrix5<-matrix(data = 1:12,nrow = 3,ncol = 4,dimnames = list(c('a','b','c'),c('v1','v2','v3','v4')))
      > my_matrix5
        v1 v2 v3 v4
      a  1  4  7 10
      b  2  5  8 11
      c  3  6  9 12
      
  • 19:50轉(zhuǎn)至

    • 也是線性代數(shù)的一個概念

    • > t(my_matrix5)
          a  b  c
      v1  1  2  3
      v2  4  5  6
      v3  7  8  9
      v4 10 11 12
      
  • 20:50除了列表外,向量、矩陣?yán)蠲羲蟮臄?shù)值型類型必須是相同的,即使原本傳入的是數(shù)值型,matrix也會把數(shù)值型轉(zhuǎn)變成字符型

    • > my_matrix6<-matrix(c(1:5,letters[1:5]),nrow = 2)
      > my_matrix6
           [,1] [,2] [,3] [,4] [,5]
      [1,] "1"  "3"  "5"  "b"  "d" 
      [2,] "2"  "4"  "a"  "c"  "e" 
      

7.數(shù)組&初識數(shù)據(jù)框

  • 0050:生成數(shù)組

    • array,括號里依次是行、列、層

    • > my_array<- array(data=1:16,dim=c(2,4,2)) ##第一個數(shù)組示例
      > my_array
      , , 1
      
           [,1] [,2] [,3] [,4]
      [1,]    1    3    5    7
      [2,]    2    4    6    8
      
      , , 2
      
           [,1] [,2] [,3] [,4]
      [1,]    9   11   13   15
      [2,]   10   12   14   16
      
      > my_array2<-  array(1:16,dim=c(4,2,2),dimnames=list(c(LETTERS[1:4]),c('col1','col2'),c('first','second')))  ##第二個數(shù)組示例,包括給數(shù)組命名
      > my_array2
      , , first
      
        col1 col2
      A    1    5
      B    2    6
      C    3    7
      D    4    8
      
      , , second
      
        col1 col2
      A    9   13
      B   10   14
      C   11   15
      D   12   16
      
  • 10:58數(shù)據(jù)框

    • 生成數(shù)據(jù)框

    • > my_df<-data.frame(name=c('TOM','ANDY','MARRY'),age=c(24,25,26),hegight=c(178,156,176))
      > my_df
         name age hegight
      1   TOM  24     178
      2  ANDY  25     156
      3 MARRY  26     176
      
    • nrow、ncol

  • 18:20介紹iris數(shù)據(jù)集

8.數(shù)據(jù)框

  • 00:50注意變量名

    • 當(dāng)某一列長度不一樣,會報錯
    • str 查看結(jié)構(gòu)
    • stringsAsFactors = FALSE
  • 08:40數(shù)據(jù)操作

    • my_df$four <-letters[1:5,1:5]#新增
      my_df2<-edit(my_df)#彈出后,修改某一個數(shù)值,必須賦值一個新變量
      fix(my_df)#永久改,不需要賦值一個新的變量
      
  • 16:40 head tail

  • 18:30 describe(iris)用來查看數(shù)據(jù)框里更多內(nèi)容:mean

  • 21:55names查看變量名names(iris)<-c('a','b','c','d','e')

  • 23:50把變量名改成中文,可以幫助改變量名,解決中文亂碼

    • 需要增加一行代碼

    • Sys.setlocale(catrgory = 'LC_CTYPE',locale='zh_CN.UTF-8')#mac系統(tǒng)
      Sys.setlocale(locale='chinese') #windows可以改
      

9.數(shù)據(jù)框的基本操作

  • 01:40cbind函數(shù) :按列合并要求必須行數(shù)相同
image-20191003122444068
image-20191003122456621
  • 03:20rbind函數(shù):按行合并,要求有相同的變量數(shù)目

  • 06:50merge函數(shù) 不加任何參數(shù),會按相同列進行merge

  • 11:50數(shù)據(jù)框的切分

    • 抽樣sample

    • iris[sample(1:nrow(iris),30,),]#行數(shù)的下標(biāo)
      
  • 17:15隨機數(shù)種子set.seed為了方便后續(xù)可重復(fù)性操作

下面是3中切分方式

  • 18:20大刀闊斧切分

    • split

    • iris_sub2<-split[iris,f = iris $setosa]#會切分出三個小數(shù)據(jù)框,只有l(wèi)ist可以容納3個數(shù)據(jù)框,因此iris_sub2是一個列表
      
  • 20:40手術(shù)刀切分

    • 根據(jù)邏輯表達式找到下標(biāo)的位置

    • iris_sub3<- iris[iris$方=='setosa'& iris$我>4.5,1:2]#精細操作,用&增加邏輯條件,同時','后面又增加了只取1到2列
      
  • 23:40subset函數(shù)

    • iris_sub4<-subset(iris,iris$方=='setosa'& iris$我>4.5,select = 1:2)#select用來選擇想要的列
      

10.條件與循環(huán)

  • 條件用if語句,判斷條件是否成立,r里不推薦用
  • 04:30{}放在if語句后面,為執(zhí)行語句==放在同一行,要用;====else要跟在第二個‘}’==,要是else另起一行,r語言就不認(rèn)識了
image-20191003130946507
  • 09:30循環(huán)-repeat

    • repeat是一個語句,因此后面也跟{},表示重復(fù)。

    • > i<- 5
      > repeat{if (i>25) break else
      + {print(i)
      +   i<-i+5}
      + }
      [1] 5
      [1] 10
      [1] 15
      [1] 20
      [1] 25
      
  • 12:10 while

    • while 當(dāng)滿足時就執(zhí)行這個語句體,當(dāng)不滿足時,就不執(zhí)行

    • > i<-5
      > while(i <=25){
      +   print(i)
      +   i<-i+5
      + }
      [1] 5
      [1] 10
      [1] 15
      [1] 20
      [1] 25
      
  • for 語句

    • > for (i in 1:10){    ##i為在事先賦值,讓i在1:10里循環(huán),這也是一個體現(xiàn)向量化循環(huán)
      +   print(i)
      + }
      [1] 1
      [1] 2
      [1] 3
      [1] 4
      [1] 5
      [1] 6
      [1] 7
      [1] 8
      [1] 9
      [1] 10
      
      > set.seed(2017)
      > x<-sample(10:100,10)
      > y<-sample(1:100,10)
      > for(i in 1:10){#i可以看成是一個位置,就是往z里填充元素,但是這個z裝下是個數(shù)
      +   z[i]= x[i]>y[i] 
      +   }
      > z
       [1] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE
      > x
       [1] 37 14 39 46 94 27 35 42 99 38
      > y
       [1] 89  1 56 57 70 86 63 44 72 69
      
      • ==append==但是把z附一個初值
      > ####append
      > set.seed(2017) #結(jié)合了for循環(huán),就會變成向量化操作
      > x<-sample(10:100,10)
      > y<-sample(1:100,10)
      > z<-NULL
      > for(i in 1:10){
      +   if(x[i] > y[i]){
      +     z= append(z,x[i])  #append追究添加到z的結(jié)果里,先進行一個 if(x[i]>y[i]的判斷
      +   }
      + }
      > z
      [1] 14 94 99
      > x
       [1] 37 14 39 46 94 27 35 42 99 38
      > y
       [1] 89  1 56 57 70 86 63 44 72 69
      
  • 19:00兩重循環(huán)

    • mat<-matrix(NA,nrow = 4,ncol = 5)
      for(i in 1:4){
        for(j in 1:5){
          mat[i,j] <- 2
        }
      }
      
      image-20191003133625109
    • image-20191003133650909

11.自定義函數(shù)&數(shù)據(jù)讀取

  • 01:00mean()

  • 04:20自定義函數(shù)

    • #三個...代表缺省參數(shù),{}里面是函數(shù)體
      (1)my_fun1<-function(x,y){
        x+y
      }
      my_fun1(1+2)
      
      (2)my_fun2<-function(x,y=2){   #x是實名參數(shù)
        x+y
      }
      my_fun2(1)
      
      (3)values<-c(sqrt(1:100))
      my_fun3<-function(x,...){ #不知道summary里有什么參數(shù)因此兩個...相互呼應(yīng),完全一致的
        print(x)
        summary(...)
      }
      my_fun3('here is the summary for values:',values,digits=2)
      
      (4)addemup<-function(x,...){
        args<-list(...)
        for(a in args) x<-x+a
        x
      }
      addemup(1,2,3,4,5)
      
      (5)normalize<-function(x,m=mean(x,...),s=sd(x,...),...){
        (x-m)/s
      }
      normalize(x=1:100)                      
      
       
      
  • 14:20從外部讀取數(shù)據(jù)

    • 頂部File 》Impotr Dataset
      • comma:逗號分隔符
    • read.csv對應(yīng).csv
      • header:設(shè)置為真,就是第一行為變量名
      • sep:默認(rèn)是‘,’
      • col.names:對列名想要更改可以重新定義它
    • read.table對應(yīng).txt
    • ==library====(read_exc====el)==》read_excel函數(shù)
    • XLConnect包
image-20191004094417173

12.數(shù)據(jù)的讀取與寫出

  • 00:50scan/cat
    • scan函數(shù) 掃描
    • cat函數(shù) 讀出去 file = 就是一個完整路徑,在最后命個名
  • 03:15讀取SPSS SAS SATAT
    • library(foreign)
    • readLines可以讀取fasta
    • stringi包也可以讀取fasta,也就是文本格式
  • 14:00導(dǎo)出去
  • write.csv
  • 讀取excel時不能用read.csv,但是導(dǎo)出excel時可以用write.csv
    • 如果是新文件不需要設(shè)置append=T,如果是已經(jīng)存在的文件需要加參數(shù)append=T
  • writeLines()

13.數(shù)據(jù)排序與長寬型數(shù)據(jù)轉(zhuǎn)換

  • sort、rank(秩次,返回的是位置)

  • order(x)可對數(shù)據(jù)框排序,返回的是排序前的元素當(dāng)按照從小到大排列后,排序前的元素的位置

    • > x<-c(23,24,56,46,78,2,95,47)
      > sort(x)
      [1]  2 23 24 46 47 56 78 95
      > rank(x)
      [1] 2 3 6 4 7 1 8 5
      > order(x)
      [1] 6 1 2 4 8 3 5 7
      > x[order(x)]
      [1]  2 23 24 46 47 56 78 95
      
  • 12:30長寬數(shù)據(jù)轉(zhuǎn)換-stack

    image-20191004103528348
    image-20191004103554576
  • image-20191004103802869
    image-20191004103834437
    • Value:值

      index:分類

  • 16:30reshape

  • image-20191004110403412
  • 22:00reshape2進行長寬型數(shù)據(jù)轉(zhuǎn)換

    • 判斷是長形數(shù)據(jù)還是寬型數(shù)據(jù),若是寬型數(shù)據(jù),我們就用melt函數(shù)把它融化成長形數(shù)據(jù),其中id.vars=...,這個...如果是長形數(shù)據(jù),那么這一列就不需要融化,就用id.vars給標(biāo)識出來就可以
    #melt()融化函數(shù) 參數(shù):id.vars= 就是標(biāo)示出不融化的
    #dcast()匯總函數(shù) 參數(shù):
    #(1)formula= Species~variable formula就是寫一個公式,標(biāo)識變量寫在左邊,想要操作的變量寫在右邊,
    #(2)fun.aggregate 匯總函數(shù) 
    #(3)value.var 對哪個變量進行匯總
    
  • 26:00復(fù)雜一點的數(shù)據(jù)

    • 下面這個后5列都是長形數(shù)據(jù),是一個不同水平堆棧在一起的一個結(jié)構(gòu),只有前兩列是純粹數(shù)據(jù)。因此不需要melt來融化了,直接可以用dcast()函數(shù)
  • image-20191004111925715
    tips #上面的圖片來自tips數(shù)據(jù)
    dcast(data=tips,formula = sex~. , fun.aggregate = mean, value.var = tip)#.是目前僅對sex這一個分類變量,用.來進行站位
    
    dcast(dcast(data=tips,formula = sex~somker , fun.aggregate = mean, value.var = tip))
    

14.變量的因子化

  • 變量的因子化:患者年齡,不能按照連續(xù)性變量,但可以變成分類變量

  • 1.公式法

    age<-sample(20:80,20)
    > age
     [1] 59 41 68 27 26 23 47 58 44 75 72 38 77 24 56 48 74 66 54 70
    age1<-1+(age>30)+(age>=40)+(age>=50)
    age2<-1*(age<30)+2*(age>=30&age<40)+3*(age>=40&age<50)+4*(age>50)
    
  • 2.cut()

  • age3<-cut(age,breaks = 4,labels = 'young','middle','m-old','old'),include.lowest = TRUE, right =TRUE)
    
    > age4<-cut(age,breaks = seq(20,80,length=4),labels = 'young','middle','m-old','old')
    Error in cut.default(age, breaks = seq(20, 80, length = 4), labels = "young",  : 
      'breaks'和'labels'的長度不一樣
    
    • 小插播seq,加length和不加length的區(qū)別
    > seq(20,80,4)
     [1] 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80
    > seq(20,80,length=4)
     [1] 20 40 60 80
    
  • 3.ifelse()

  • ifelse(age>35,'old','young')
    ifelse(age>60,ifelse(age<30,'young','old',))
    > ifelse(age>60,'old',ifelse(age<30,'young','middle'))
     [1] "middle" "middle" "old"    "young"  "young"  "young"  "middle" "middle" "middle" "old"    "old"   
    [12] "middle" "old"    "young"  "middle" "middle" "old"    "old"    "middle" "old"   
    
  • 4.car()擴展包

  • recode(var=age,recodes="20:29 =1;30:39=2;40:49=3;50:hio=4")
    

15.apply函數(shù)家族

  • 00:44數(shù)據(jù)匯總

  • 3:00apply+lapply

  • mat<-matrix(1:24,nrow =4,ncol= 6)
    apply(mat,1,sum)
    apply(iris[,1:4],2,mean)
    lapply(X = c(1:5),FUN = log)#返回的是list #遍歷
    lapply(iris[,1:3],function(x)lm_x~iris$Petal.Width,data=iris[,1:3])
    
  • 07:40sapply 返回的是向量、矩陣、數(shù)據(jù)框

  • sapply(1:5,log)
    sapply(1:5,function(x)x+3)
    
  • 09:26tapply 只適用于數(shù)據(jù)框,是根據(jù)分類變量將一個數(shù)值型變量進行切分,在進行數(shù)據(jù)匯總

  • tapply(X=iris$Sepal.Length,INDEX = iris$Species,FUN = mean)
    
  • 11:40mapply

    myfun<-function(x,y){
      if(x>4)return(y)
      else return(x+y)
    }
    myfun(1:5,2:6)
    
    mappply(myfun,1:5,2:6)
    

16.數(shù)據(jù)匯總函數(shù)

  • 1:30 Ave

  • 3:00 by

  • 5:50aggrate 根據(jù)數(shù)據(jù)框原本的變量生成新的變量

  • view(mtcars)
    
    image-20191004162515374
  • 14:30vsweep 針對數(shù)組

17.plyr包

  • image-20191004171145882
    image-20191004172823006

    ==上面顯示sex和smoker的方法是相同的意思,都是分類變量==

  • 21:00dlply,lapply輸出都是list,在做回歸分析時用的多

    ? 比如對iris數(shù)據(jù)集中的兩個變量進行回歸

    my_model<-function(x)lm(Sepal.length~Sepal.Width,data =x)
    dlply(iris,~Species,my_model)
    

    ==上面不太懂==

  • 23:50 each()、colwise()、numcolwise()對數(shù)據(jù)集進行批量操作
  • image-20191004175815830
  • image-20191004180310297

18.dplyr包

  • 00:40filter

    sub1<-filter(tips,tis$smoker=='No',tips$day=='Sun')#filter只針對數(shù)據(jù)框的行進行篩選
    sub2<-slice(tips,1:5)#針對行
    sub3<-select(tips,tip,sex,smoker)
    sub4<-select(tips,2:5)
    
  • Arrange()

  • nex_tips <- arrange(tips,desc(total_bill),tip)
    head(nes_tips)
    
    new_tips<-rename(tips,bill = total_bill,tipp = tip)
    distinct(tips,day)#返回因子水平函數(shù)
    
    
  • mutate()

  • mutate(tips,rate=tip/total,new_rate=rate*100)#new_rate和rate同步運行
    #transform這種情況就會報錯,運行rate,可直接new_rate
    transform(tips,rate=tip/total,new_rate=rate*100)
    
  • sample_n

  • sample_n(iris,size=10)#隨機抽取10行,
    sample_frac(iris,0.1)#隨機抽取10%的行數(shù),數(shù)據(jù)有150行,抽取15行
    
  • group_by,與summarise結(jié)合使用

  • group = group_by(tips,smoker)#把數(shù)據(jù)框中根據(jù)分類變量進行分組,然后進行匯總操作
    summarise(group,count = n(),mean_tips = mean(tip),sd_bill=sd(total_bill))#n用來計數(shù)
    
  • %>%管道符

  • result<-tips %in% group_by(smoker,sex) %in% summarise(group,count = n(),mean_tips = mean(tip),sd_bill=sd(total_bill))
    
  • 20:20join家族

  • df_a<-data.frame(x=c('a','b','c','a','c','b','c'),y=1:7)
    df_b<-data.frame(x=c('a','b','c'),z=10:12)
    
    inner_join(df_a,df_b,by='x')
    
    semi_join(df_a,df_b,by='x')
    
    anti_join(df_a,df_b,by='x')
    
    left_join(df_a,df_b,by='x')
    
    right_join(df_a,df_b,by='x')
    

19.data.table

  • data.table 變量長度不一樣時,長度短的變量會自動重復(fù)

  • dt<-dta.table(v1=c(1,2),v2=LETTERS[1:3],v3=round(rnorm(12,2,2)),v4=sample(1:20,12))#rnorm 生成均值為2標(biāo)準(zhǔn)差為2的服從標(biāo)準(zhǔn)正態(tài)分布
    
    dt[3:6,]
    dt[v2=='B']同df[v2=='B',]相同
    dt[v2 %in% c('A','B')]
    dt[,list(1,2)]
    dt[,list(sum_v4=sum(4),mean_v4=mean(v4))]
    dt[,list(v5=v4+1,v6=v3-1)]
    dt[,{print(v2);plot(1:12,v3,col='red')}] #;的作用就是分行 
    dt[,list(sum_v3=sum(v3),mean_v4=mean(v4),by=v2)]
    dt[,list(sum_v3=sum(v3),mean_v4=mean(v4),by=.(v1,v2)]
    dt[,list(sum_v3=sum(v3),mean_v4=mean(v4),by=list(v1,v2)]         
    dt[1:8,list(sum_v3=sum(v3),mean_v4=mean(v4),by=v2)]
    #N頻數(shù)匯總
    dt[,.N,by=list(v1,v2)]
    dt[,v5 : v4+1]
    dt[,c('v5','v6'):= list(v3+1,v4-1]
    
  • Set key()設(shè)置關(guān)鍵變量

  • attach(iris)#如果不知道Species在attach里面,就可以先執(zhí)行attach
    Species
    detach(iris)
    
    setkey(df,v2)#setkey設(shè)置讓r知道現(xiàn)在要對df的v2進行搜索了
    dt[c('A','C')]
    
    dt[v2 %in% c('a','c')]
    
  • nomatch

    dt[c('A','D'),nomatch=0] #沒有D就不顯示出來
    
  • by = .EACHI

  • %>% 串聯(lián)操作

  • dt[,.(v4_sum = sum(v4)),by = v2][v4_sum>40]
    

20.缺失值的識別與處理(1)

  • NA

  • X<-C(1,2.3,NA,NA,4)
    mean(x,na.rm=TRUE)
    sum(x,na.rm=TRUE)
    #對確實值求個數(shù)
    sum(is.na(x))
    #去掉na
    x[!is.na(x)]
    
    
    iris_na<-iris
    for(i in 1:4){
      iris_na[sample(1:nrow(iris),5),i]==NA
    }
    sapply(iris_na[,1:4],function(x)which(is.na(x)))
    sapply(iris_na[,1:4],function(x)sum(is.na(x)))
    
  • psych包

  • library(psych)
    describe(iris_na)#由于前面我們設(shè)置了5個確實值,所以現(xiàn)在返回的是145行,把有na值的行直接去掉了
    sapply(iris_na[,1:4],function(x)(sum(is.na(x))/nrow(iris_na)))
    lm()
    
  • 09:30回顧分析里有確實值

  • lm(Sepal.Length~Width,data = iris_na, na.action = na.omit)
    mean_value<-sapply(iris_na[,1:4],mean,na.rm =TRUE)
    
    for(i in 1:4){
      iris_na[is.na(iris_na[,i]),i]] = mean_value[i]
    }
    summary(iris_na)#可以計算mean了,說明現(xiàn)在沒有na了
    describe(iris_na)#看看此時na是不是150了
    
  • 14:20新創(chuàng)立一個數(shù)據(jù)集

    >cancer <- data.frame(id= 1:1000,#replace=T,可以設(shè)置重復(fù)取值
                        sur_days=sample(100:1000,1000,replace =TRUE),
                        type= sample(c('colon','liver','lung'),1000,replace =TRUE),
                        treatment = sample(c('chemo','sugr'),1000,replace = T))
    
    > cancer
         id sur_days  type treatment
    1     1      193 colon     chemo
    2     2      273 colon      sugr
    3     3      551 liver      sugr
    4     4      830 liver      sugr
    5     5      457  lung     chemo
    6     6      207  lung      sugr
    
    ##隨機生成一些確實值
    cancer[sample(1:1000,90),2]<-NA
    mean_value<- tapply(cancer$sur_days,list(cancer$type,cancer$treatment),mean,na.rm=TRUE)
    > mean_value
             chemo     sugr
    colon 532.6167 564.6667
    liver 583.8652 566.6500
    lung  549.1429 582.9648
    
    for(i in 1:3){
      for(j in 1:2){
        cancer$sur_days[is.na(cancer$sur_days)&cancer$type == rownames(mean_value)[i]& cancer$treatment == colnames(mean_value)[j]]= mean_value[i,j]
      }
    }#因為上面的mean——value是有兩個維度的所以要有i和j兩個變量
    

21.缺失值的識別與處理(2)

  • 缺失值的識別與處理
rm(list = ls())
library(mlbench)
data('BostonHousing')
head(BostonHousing)

original_data<-BostonHousing
set.seed(2017)
BostonHousing[sample(1:nrow(BostonHousing),80),'rad']<-NA #生成缺失值
BostonHousing[sample(1:nrow(BostonHousing),80),'PTRATION']<-NA
library(mice)
md.pattern(BostonHousing) 

library(Hmisc)

im_mean<-impute(BostonHousing$ptratio,median)
head(im_mean)
BostonHousing$ptratio<-NULL

  • mice包進行缺失值的插補

mice_mod<-mice(BostonHousing[,!names(BostonHousing)%in% 'medv'],method = 'rf')#rf是隨機森林的縮寫,不要把medv這個變量放進來,接下來做回歸分析把缺失值的作為因變量,其他不含缺失值變量的作為自變量,建立一種模型來進行回歸,對因變量進行估計,最后預(yù)測那些缺失值是多少。現(xiàn)在ptratio因為含有缺失值,就是這里面的因變量
mice_output<-complete(mice_mod)

actuals <- original_data$rad[is.na(BostonHousing$rad)]

predics<-mice_output[is.na(BostonHousing$rad)]

mean(actuals!=predicts)


  • VIM包
library(VIM)
data('airquality')
md.pattern(airquality)

aggr_plot<-aggr(airquality,col=c('red','green'),numbers=TRUE,sortVars = TRUE,labels = names(airquality),cex.axis = 0.7,gap = 3) #numbers真是把缺失值和不缺失值的比例顯示出來,sortVars是根據(jù)缺失值的多少進行排序

#另一個可視化的函數(shù)

marginplot(airquality[1:2])
#把因變量的值當(dāng)成未知,用自變量對其預(yù)測

data(sleep)
head(sleep)
sleepIm<-regressionImp(Sleep+Gest+Span+Dream+NonD~BodyWgt+BrainWgt,data=sleep)
head(sleepIm)
#因變量放在公式的左邊,就是在~左邊。得到的TRUE表示之前此處是缺失值
#因變量有連續(xù)性變量和離散型變量,如果知道左側(cè)的因變量都是分類變量面就可以用family='logical',如果不知道,就用family='auto'
sleepIm<-regressionImp(Sleep+Gest+Span+Dream+NonD~BodyWgt+BrainWgt,data=sleep,family='auto')
head(sleepIm)

22.異常值和重復(fù)值的處理

image-20191005164148850
  • 重復(fù)值的處理

    > x<-c(1,2,3,4,5,1,2,3)
    > unique(x)
    [1] 1 2 3 4 5
    > duplicated(x)
    [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE
    > tmp<-x[!duplicated(x)]
    > tmp
    [1] 1 2 3 4 5
    

23.字符串的處理

> x<-c('fudan','jiaoda')
> nchar(x)
[1] 5 6
> length(x)
[1] 2
> toupper('shengxinjinengshu')
[1] "SHENGXINJINENGSHU"
> tolower('SHENGXINJINENGSHU')
[1] "shengxinjinengshu"

> stringa<-LETTERS[1:5]
> STRINGB<-1:5
> paste(stringa,STRINGB,sep = '-')
[1] "A-1" "B-2" "C-3" "D-4" "E-5"
> paste(stringa,STRINGB,collapse = '-')
[1] "A 1-B 2-C 3-D 4-E 5"
 
> paste0(stringa,STRINGB)
[1] "A1" "B2" "C3" "D4" "E5"
> paste0(stringa,STRINGB,sep = '-')
[1] "A1-" "B2-" "C3-" "D4-" "E5-"
> paste0(stringa,STRINGB,collapse  = '-')
[1] "A1-B2-C3-D4-E5"

> stringC<-paste(stringa,STRINGB,sep = '/') 
> stringC
[1] "A/1" "B/2" "C/3" "D/4" "E/5"
> strsplit(stringC,split = '/')
[[1]]
[1] "A" "1"

[[2]]
[1] "B" "2"

[[3]]
[1] "C" "3"

[[4]]
[1] "D" "4"

[[5]]
[1] "E" "5"

> stringd<-c('sheng','xin','ji','neng','shu')
> sub_str<-substr(stringd,start = 2,stop = 4) 
> sub_str
[1] "hen" "in"  "i"   "eng" "hu" 
> substr(stringd,start = 2,stop = 4)<-'aaa'
> stringd
[1] "saaag" "xaa"   "ja"    "naaa"  "saa"   
> my_string <- c('above','about','abrotion','cab') 
> grep('ab\\b',my_string,value = T)
[1] "cab"
> grep('\\bab',my_string,value = T)
[1] "above"    "about"    "abrotion"
> money<-c('$1888','$2888','$3888') 
> as.numeric(money)
[1] NA NA NA
Warning message:
強制改變過程中產(chǎn)生了NA  
> gsub('\\$',replacement = '',money)
[1] "1888" "2888" "3888"
> sub('\\$',replacement = '',money)
[1] "1888" "2888" "3888"
> money2<-c('$1888 $2888 $3888')
> sub('\\$',replacement = '',money2)
[1] "1888 $2888 $3888"
> test_string<- c('happy','apple','application','apolitic') 
> regexpr('pp',test_string)
[1]  3  2  2 -1
attr(,"match.length")
[1]  2  2  2 -1
attr(,"index.type")
[1] "chars"
attr(,"useBytes")
[1] TRUE
> test_string[regexpr('pp',test_string)>0] #不匹配的就是-1
[1] "happy"       "apple"       "application"
> agrep()#匹配英美式
Error in agrep() : 缺少參數(shù)"pattern",也沒有缺省值
> string1<-c('I need a favour','my favorite report','you made an error')
> agrep('favor',string1)
[1] 1 2
image-20191005173203407
  • grep(value=T和不加 的 區(qū)別)
image-20191005173247442
  • grepl
    • 沒有value = T 這個參數(shù)
    • ignore.case = T,可以幫助忽略大小寫
image-20191005173629633
image-20191005173834186
image-20191005173940484
  • 利用正則表達式
    • 找到字符串中的年份,如S2008
    • \\b表示放在最右邊表示右邊界
image-20191005174430380
image-20191005174532917

24.正則表達式

  • 網(wǎng)上
. 默認(rèn)情況下, 句點匹配除新行符 (rn) 序列外的任何單個字符,例如, ab. 可以匹配 abc 和 abz 以及 ab_.
***** 星號匹配零個或多個前面的字符。例如, a* 可以匹配 ab 和 aaab. 它還可以匹配完全不包含 "a" 的任意字符串的開始處.通配符: 句點星號模式 .* 是匹配范圍最廣的模式之一, 因為它可以匹配零個或多個 任意 字符 (除了新行符: r 和n). 例如, abc.*123 可以匹配 abcAnything123, 也能匹配 abc123.
? 問號匹配零或一個前面的字符,可以理解為 "前面的那項是可選的". 例如, colou?r 可以匹配 color 和 colour, 因為 "u" 是可選的.
+ 加號匹配一個或多個前面的字符,例如 a+ 可以匹配 ab 和 aaab. 但與 a+a? 不同的是, 模式 a+ 不會匹配開始處沒有 "a" 的字符串.
{min,max} 匹配出現(xiàn)次數(shù)介于 minmax 的前面的字符, 例如, a{1,2} 可以匹配 ab 但只匹配 aaab 中的前兩個 a.此外, {3} 表示準(zhǔn)確匹配 3 次, 而 {3,} 則表示匹配 3 次或更多. 注: 且第一個必須小于等于第二個.
[...] 字符類: 方括號把一列字符或一個范圍括在了一起 (或兩者). 例如, [abc] 表示 "a, b 或 c 的中任何一個字符". 使用破折號來創(chuàng)建范圍; 例如, [a-z] 表示 "在小寫字母 a 和 z (包含的) 之間的任何一個字符". 列表和范圍可以組合在一起; 例如 [a-zA-Z0-9_] 表示 "字母, 數(shù)字或下劃線中的任何一個字符".字符類后面可以使用 *, ?, + 或 {min,max} 進行限定. 例如, [0-9]+ 匹配一個或多個任意數(shù)字; 因此它可以匹配 xyz123 但不會匹配 abcxyz.
[^...] 匹配 在類中的任何一個字符. 例如, [^/]* 匹配零個或多個 不是 正斜杠的任意字符, 例如 , [^0-9xyz] 匹配既不是數(shù)字也不是 x, y 或 z 的任何一個字符.
\d 匹配任意一個數(shù)字 (相當(dāng)于類 [0-9]). 相反地,大寫的\D表示“任意的 數(shù)字字符”。 例如, [\d.-] 表示 "任何數(shù)字, 句點或負號".
\s 匹配任意單個空白字符 , 主要是==空格, tab 和新行符 (r 和n==). 相反地, 大寫的 \S 表示 "任何 空白字符".
\w 匹配任何==單個 "單詞"== 字符, 即==字母, 數(shù)字或下劃線==. 這等同于 [a-zA-Z0-9_]. 相反地, 大寫的 \W 表示 "任何 單詞字符".
  • R中的練習(xí)
> ###1.原義表達式
> mystring1<- c('apple','orange')
> grep('p',string1)
[1] 2

> ###2.轉(zhuǎn)移表達式
> mystring2<-c('shuda','.dfs','-dsfd')
> grep('.',mysting2) #.作為pattern的話,是一個轉(zhuǎn)義表達式,代表所有字符,包括它自己
[1] 1 2 3

> mystring3<-c('9aee','fese7','10000')
> grep('[7-9]',mystring3)
[1] 1 2
> 
> grep('[0-1]',mystring3)
[1] 3
> grep('[0-6]',mystring3)
[1] 3

> mystring4<-c('apple','application','abb')
> grep('^ap',mystring4)
[1] 1 2

> mystring3<-c('9aee','fese7','10000')
>
> grep('[^0-1]',mystring3)
[1] 1 2
> grep('[^7-9]',mystring3)
[1] 1 2 3
> grep('[^2-6]',mystring3)
[1] 1 2 3
> mystring3<-c('9aee','fese7','50000')
> grep('[^0-1]',mystring3)
[1] 1 2 3

> mystring6<-c('1220','2267','2226','12333')
> grep('2{2,3}',mystring6) #重復(fù)2到3次
[1] 1 2 3
> grep('2{2,}',mystring6) #重復(fù)大于等于2次的返回
[1] 1 2 3

> mystring7<-c('food','foot','foul','fans')
> grep('fo{1,}',mystring7)#只對o起作用
[1] 1 2 3
> grep('fo+',mystring7)
[1] 1 2 3
> grep('(fo){1,}',mystring7)
[1] 1 2 3

> mystring8<-c('kobe','messi','neymar')
> grep('^k|^m',mystring8)
[1] 1 2

> mystring9<-c('active','positive','negative','love')
> grep('ive$',mystring9)
[1] 1 2 3
> grep('ive\\b',mystring9) #\\b:boundry
[1] 1 2 3

> ###保義符
> mystring10<-c('ac^bb','^df')
> grep('\\^',mystring10)
[1] 1 2

25.stringr&stringi包

> ###stringr
> library(stringr)
> library(stringi)
> str_c('a','b',sep = '-') #與paste類似
[1] "a-b"
> str_length() #nchar()
Error in stri_length(string) : 缺少參數(shù)"string",也沒有缺省值

> jns <- 'sheng xin ji neng shu'
> str_sub(jns,c(1,4,8),c(2,6,11)) #與substr()類似
[1] "sh"   "ng "  "in j"
> str_sub(jns,1,1)<-'S'
> jns
[1] "Sheng xin ji neng shu"

> fruit<-c('apple','pear','banana')
> str_dup(fruit,2)
[1] "appleapple"   "pearpear"     "bananabanana"
> str_dup(fruit,2:4)
[1] "appleapple"               "pearpearpear"            
[3] "bananabananabananabanana"
> str_dup(fruit,2:5) #循環(huán)補齊
[1] "appleapple"                "pearpearpear"             
[3] "bananabananabananabanana"  "appleappleappleappleapple"
Warning message:
In stri_dup(string, times) :
  longer object length is not a multiple of shorter object length

> string<- ' Eternal love for jns '
> str_trim(string ,side = 'both')
[1] "Eternal love for jns"

> phones<- c(' 219 733 8965','329-356-765 ','banana','456 789 234','764 126 893','apple','233.456.7656 ','333 555 7777','123 234 3456 and 456 567 6789','Work:333-666-8888','$1000','Home: 543.355.6790')
> str_extract(phones,'([1-9][0-9]{2})[- .]([0-9]{3})[- .]([0-9]{4})') #{}內(nèi)是重復(fù)幾次
 [1] "219 733 8965" NA             NA             NA            
 [5] NA             NA             "233.456.7656" "333 555 7777"
 [9] "123 234 3456" "333-666-8888" NA             "543.355.6790"
> str_extract(phones,'([1-9][0-9]{2})[- .]([0-9]{3})[- .]([0-9]{3,})') #{}內(nèi)是重復(fù)幾次
 [1] "219 733 8965" "329-356-765"  NA             "456 789 234" 
 [5] "764 126 893"  NA             "233.456.7656" "333 555 7777"
 [9] "123 234 3456" "333-666-8888" NA             "543.355.6790"
> 
> fruits<-c('one apple','two pears','three bananas')
> str_replace(fruits,'[aeiou]','-')
[1] "-ne apple"     "tw- pears"     "thr-e bananas"

> ###stringi
> stri_join(1:7,letters[1:7], sep='-')
[1] "1-a" "2-b" "3-c" "4-d" "5-e" "6-f" "7-g"
> stri_join(1:7,letters[1:7], collapse = '-')
[1] "1a-2b-3c-4d-5e-6f-7g"

> stri_cmp_eq('AB','aB')
[1] FALSE
> stri_cmp_neq('AB','aB')
[1] TRUE

> stri_cmp_lt('121','221')#不是當(dāng)成數(shù)值比較,而是當(dāng)成字符串比較,前者小于后者
[1] TRUE

> stri_cmp_lt('a121','b221')
[1] TRUE
> stri_cmp_lt('c121','b221')
[1] FALSE
> stri_cmp_gt('e121','b221')
[1] TRUE
> stri_cmp_gt('e321','b221')
[1] TRUE

> language<-c('Python','R','PHP','Ruby','Java','JavaScript','C','Oracle','C++','C#','Spark','GO','Room','Good','Pathon','ScriptJava','R2R','C+','C*')
> stri_count(language,fixed = 'R')
 [1] 0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0
> stri_count(language,regex = '^J')
 [1] 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0

> test<-'The\u00a0aboue-mentioned   features are very useful.  Warm thank to you.   Tomorrow is a, new $# day##'
> stri_count_boundaries(test,type='word')
[1] 44
> stri_count_boundaries(test,type='sentence')
[1] 3
> stri_count_boundaries(test,type='character')
[1] 97

> stri_dup(c('abc','pqrst'),c(4,2))
[1] "abcabcabcabc" "pqrstpqrst"  

> stri_duplicated(c('a','b','a',NA,'a',NA))
[1] FALSE FALSE  TRUE FALSE  TRUE  TRUE

> stri_duplicated(c('a','b','a',NA,'a',NA),fromLast = T) #從后往前判斷
[1]  TRUE FALSE  TRUE  TRUE FALSE FALSE

> stri_duplicated_any(c('a','b','a',NA,'a',NA))
[1] 3

> stri_detect_fixed(c('stringi R','Rexamine','123'),c('i','R','0'))
[1]  TRUE  TRUE FALSE

> stri_detect_regex(c('apple','application','append','ape'),'^ap')
[1] TRUE TRUE TRUE TRUE
> 
> stri_detect_regex(c('apple','application','append','ape'),'^app')
[1]  TRUE  TRUE  TRUE FALSE

> stri_detect_regex(c('apple','application','append','ape'),'e\\b')
[1]  TRUE FALSE FALSE  TRUE

> stri_detect_regex(c('APPLE','application','appEND','ape'),'e\\b',case_insensitive = TRUE) #這個case_insensitive(忽略大小寫)為什么不能補齊呢?
[1]  TRUE FALSE FALSE  TRUE

> stri_startswith_fixed(c('a1','a2','b3','a4','c5'),'a')
[1]  TRUE  TRUE FALSE  TRUE FALSE

> stri_startswith_fixed(c('a1','a2','b3','a4','c5'),'a1')
[1]  TRUE FALSE FALSE FALSE FALSE

> stri_startswith_fixed(c('abada','aabadc','abaee'),'ba',from = 2)
[1]  TRUE FALSE  TRUE

> stri_endswith_fixed(c('abaDC','aabadc','ababa'),'ba')
[1] FALSE FALSE  TRUE

> stri_endswith_fixed(c('abaDC','aabadc','ababa'),'ba',to = 3)
[1]  TRUE FALSE  TRUE

> stri_extract_all_fixed('abaBAba','Aba',case_insensitive = TRUE,overlap=T)
[[1]]
[1] "aba" "aBA" "Aba"

> stri_extract_all_boundaries('stringi: THE string processing package 123.45...')
[[1]]
[1] "stringi: "   "THE "        "string "     "processing " "package "   
[6] "123.45..."  


> stri_extract_all_words('stringi: THE string processing package 123.45...')
[[1]]
[1] "stringi"    "THE"        "string"     "processing" "package"   
[6] "123.45"    


> stri_isempty(c(',','','123'))
[1] FALSE  TRUE FALSE

> stri_locate_all('I love biotree, I love jinengshu',fixed = 'lo')
[[1]]
     start end
[1,]     3   4
[2,]    19  20

  • {2,4}匹配2到4次。\\b邊界,放在最后就是右邊界
image-20191006015240570
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容