R基礎(chǔ)五(字符串)

缺失信息

R中用NA表示缺失信息。往往很多數(shù)據(jù)中包含NA值,需要去除。

> a = c(NA,1:49)
> a
 [1] NA  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17
[19] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
[37] 36 37 38 39 40 41 42 43 44 45 46 47 48 49
> sum(a)
[1] NA
> mean(a)
[1] NA
> sum(a,na.rm = TRUE)   ##很多函數(shù)里都有去除NA的選項
[1] 1225
  • 查看數(shù)據(jù)集中是否含義缺失值(is.na())
> is.na(a)
 [1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[10] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[28] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[46] FALSE FALSE FALSE FALSE FALSE
  • 去除數(shù)據(jù)集中的缺失值(na.omit())
> b = c(NA,1:7,NA,NA)
> c = na.omit(b)
> c
[1] 1 2 3 4 5 6 7
attr(,"na.action")
[1]  1  9 10
attr(,"class")
[1] "omit"
> b
 [1] NA  1  2  3  4  5  6  7 NA NA
> is.na(c)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE

當用na.omit處理一個數(shù)據(jù)框時,是將包含NA的那一行全都刪除。
但是刪除太多缺失值會刪除太多數(shù)據(jù),就有很多包處理缺失值。


處理缺失值
  • 其他缺失值
    NaN:代表不可能的值,可以用is.nan()識別不可能值
    Inf:表示無窮,有正無窮和負無窮,可以用is.infinite()識別無窮值

字符串

強調(diào):字符串出現(xiàn)的地方必須加引號""/''

  • 統(tǒng)計字符串
> nchar('hello world')
[1] 11
> month.name
 [1] "January"   "February"  "March"     "April"     "May"       "June"     
 [7] "July"      "August"    "September" "October"   "November"  "December" 
> nchar(month.name)
 [1] 7 8 5 5 3 4 4 6 9 7 8 8

length()返回的是向量中元素的個數(shù),而nchar()則是返回每個元素的字符串的個數(shù)。

  • paste()用來合并字符串
> paste('I','love','you',sep = '-')
[1] "I-love-you"

如果是一個向量和字符串連接,并不是字符串直接添加到向量的尾部,而是向量中的元素分別于字符串相連。

> names = c('yao','jia','ling')
> paste(names,'shi pig')
[1] "yao shi pig"  "jia shi pig"  "ling shi pig"
  • substr()提取字符串

substr(字符串,起始點,終止點),返回起始點和終止點之間的字符串。

> substr(month.name,1,3)
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep"
[10] "Oct" "Nov" "Dec"

toupper()轉(zhuǎn)換為大寫,tolower()轉(zhuǎn)換為小寫。

> temp = substr(month.name,1,3)
> toupper(temp)
 [1] "JAN" "FEB" "MAR" "APR" "MAY" "JUN" "JUL" "AUG" "SEP"
[10] "OCT" "NOV" "DEC"
> tolower(temp)
 [1] "jan" "feb" "mar" "apr" "may" "jun" "jul" "aug" "sep"
[10] "oct" "nov" "dec"
  • 字符串替換

要想變成首字母大寫,則可以用sun()或者gsub()進行替換。
sub()替換一次,gsub()全局替換

> gsub('^(\\w)','\\U\\1',tolower(temp))
 [1] "Ujan" "Ufeb" "Umar" "Uapr" "Umay" "Ujun" "Ujul"
 [8] "Uaug" "Usep" "Uoct" "Unov" "Udec"
> gsub('^(\\w)','\\U\\1',tolower(temp),perl = T)
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep"
[10] "Oct" "Nov" "Dec“
('^(\\w)' ^表示首字母,\\w表示字符集的簡寫
'\\U\\1'替換為大寫,只替換一次,
tolower(temp) 需要替換的字符串
perl = T 支持perl類型的正則表達式
> toupper(temp)
 [1] "JAN" "FEB" "MAR" "APR" "MAY" "JUN" "JUL" "AUG" "SEP"
[10] "OCT" "NOV" "DEC"
> gsub('^(\\w)','\\L\\1',toupper(temp),perl = T)
 [1] "jAN" "fEB" "mAR" "aPR" "mAY" "jUN" "jUL" "aUG" "sEP"
[10] "oCT" "nOV" "dEC"
\\L表示替換為小寫
  • 字符串查找(grep)
> a =c('a','A+','AC')
> grep('A+',a)   ## +表示可以匹配1到正無窮,所以A+和AC都可以
[1] 2 3
> a =c('a','A+','AC')
> grep('A+',a,fixed = TRUE)  ##fixed = TRUE表示搜索一個文本字符串,fixed = False則表示支持正則表達式。返回值為匹配的下標。
[1] 2
> grep('A+',a,fixed = F)
[1] 2 3
  • 字符串匹配(match())
    不支持正則表達式,有一點相當于%in%的包含于。
> match('A+',a)
[1] 2
  • 字符串分割strsplit()

需要兩部分,字符串和分隔符,返回值為列表,便于存儲。

> path = '/usr/local/bin/R'
> strsplit(path,'/')
[[1]]
[1] ""      "usr"   "local" "bin"   "R"    ## 第一個為空是英文usr前的斜杠前為空。
> strsplit(c(path,path),'/')  ##分割兩個path的情況
[[1]]
[1] ""      "usr"   "local" "bin"   "R"    

[[2]]
[1] ""      "usr"   "local" "bin"   "R" 

小tips

如何生成字符串成對組合,也叫笛卡爾集。需要使用outer()函數(shù)。

> face = 1:13
> suit = c('spades','clubs','hearts','diamonds')
> outer(face,suit,FUN = paste)
      [,1]        [,2]       [,3]        [,4]         
 [1,] "1 spades"  "1 clubs"  "1 hearts"  "1 diamonds" 
 [2,] "2 spades"  "2 clubs"  "2 hearts"  "2 diamonds" 
 [3,] "3 spades"  "3 clubs"  "3 hearts"  "3 diamonds" 
 [4,] "4 spades"  "4 clubs"  "4 hearts"  "4 diamonds" 
 [5,] "5 spades"  "5 clubs"  "5 hearts"  "5 diamonds" 
 [6,] "6 spades"  "6 clubs"  "6 hearts"  "6 diamonds" 
 [7,] "7 spades"  "7 clubs"  "7 hearts"  "7 diamonds" 
 [8,] "8 spades"  "8 clubs"  "8 hearts"  "8 diamonds" 
 [9,] "9 spades"  "9 clubs"  "9 hearts"  "9 diamonds" 
[10,] "10 spades" "10 clubs" "10 hearts" "10 diamonds"
[11,] "11 spades" "11 clubs" "11 hearts" "11 diamonds"
[12,] "12 spades" "12 clubs" "12 hearts" "12 diamonds"
[13,] "13 spades" "13 clubs" "13 hearts" "13 diamonds"


?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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