R學習筆記_01_數(shù)據(jù)類型

摘要:介紹R語言中常用的數(shù)據(jù)結構,向量辙纬、矩陣豁遭、列表贺拣、數(shù)據(jù)庫蓖谢、因子等。主要是它們的創(chuàng)建譬涡、索引和簡單的運算闪幽。

數(shù)據(jù)類型

  • 主要的數(shù)據(jù)類型:

    • 數(shù)值型:numeric
    • 邏輯型:logical(T/TRUE F/FALSE)
    • 字符型:character
    • 復數(shù)型:complex(a+bi)
    • 原味型:raw(二進制數(shù)據(jù))
    • 缺省型:missing value(NA/not available)

    關于數(shù)據(jù)類型的詳細介紹和操作參見另一篇課程筆記:R魔02_筆記_數(shù)據(jù)類型

  • 查看數(shù)據(jù):

    1. 查看當前系統(tǒng)里的數(shù)據(jù)對象涡匀,返回變量名:ls()

    2. 辨別和轉換數(shù)據(jù)類型:

      類型            辨別                轉換
      character       is.character()      as.character()
      complex         is.complex()        as.complex()
      double          is.double()         as.double()
      integer         is.integer()        as.integer()
      logical         is.logical()        as.logical()
      NA              is.na()             as.na()
      numeric         is.numeric()        as.numeric()
      

數(shù)據(jù)結構

  • 數(shù)據(jù)結構包括:
    • 向量
    • 矩陣
    • 數(shù)組
    • 數(shù)據(jù)框
    • 因子factor/名義或等級
  1. 向量:c()

    • 直接創(chuàng)建向量:同一向量中的數(shù)據(jù)必須是同一個類型的盯腌。
    > a <- c(1, -2, 3, -4, 5, 0)
    > b <- c("age","name" , "weight") 
    > C <- c(TRUE, TRUE, FALSE, FALSE) 
    
    > a <- c(2:6)     # 冒號"n:m"表示從n到m,包含n和m陨瘩。
    # 等價于
    > a <- c(2, 3, 4, 5, 6)
    
    > r <- c(5:1)     #逆序
    > r
    5 4 3 2 1 
    
    # 冒號運算的結果其實也是個向量
    > 2*1:5             #表達式中:的級別最高
    [1] 2 4 6 8 10
    
    • 用函數(shù)生成向量:
    # 1. 生成有規(guī)律的序列 
    > seq(1,10,2)                   # seq(from, to, by)腕够,從1到10级乍,間隔為2。
    [1] 1 3 5 7 9
    > seq(1, by=2, length=10)       #從1開始帚湘,間隔為2玫荣,總共要10個數(shù)。
    [1] 1 3 5 7 9 11 13 15 17 19
    
    > letters[1:30]             #生成字母序列大诸,abcd捅厂,26個,第26之后的值為NA
    
    # 2. 重復
    > rep(c(1,2),4)                 # 向量整體4次
    [1] 1 2 1 2 1 2 1 2
    > rep(c(1,2),each=4)            # 按元素重復
    [1] 1 1 1 1 2 2 2 2
    > rep(c(1,2,3,4),c(5,3,4,2))    # 向量元素分別重復5432次底挫。必須一樣長恒傻。
    [1] 1 1 1 1 1 2 2 2 3 3 3 3 4 4
    
    • 選擇向量中的元素
    > a <- c(1, -2, 3, -4, 5, 0)
    > a[3]
    [1] 3
    
    > a[2,3]            # 選擇兩個
    [1] -2 3
    
    > a[1:4]            # 選擇多個連續(xù)
    1 -2 3 -4
    
    > a[-2]             # 去掉第2個元素
    1 3 -4 5 0
    
    # 用向量選擇
    > a[c(1,3,4)]       # 一定要有c()函數(shù),a[1,2,3]是錯的
    
    # 布爾
    > a[a<3]            # 列出小于3的元素
    
    • 用which()函數(shù)選擇
    which.max(a)        #()里是向量名建邓。返回下標盈厘。
    which.min(a)
    a[which.max(a)]     #返回最大值
    which(a==2)         #所有等于2的元素,的位置/下標官边。
    which(a>3)
    

    注意:向量不能添加或刪除元素沸手。改變向量需要重新賦值。

    • 附:常用的向量計算函數(shù)

      sum()           #求和
      max()           #求最大值
      min()           #求最小值
      range()         #求極差(全矩)
      mean()          #均值
      median()        #中數(shù)
      var()           #方差
      sd()            #標準差
      sort()          #排序注簿,從小到大
      rev()           #反向排列rev(sort())
      rank()          #給出向量的秩(每個元素的排名)
      prod()          #向量的連乘積
      append()        #添加元素
      replace()       #替換
      match()         #匹配
      pmatch()        #部分匹配
      all()           #判斷所有
      any()           #判斷部分
      
  2. 矩陣:matrix()默認按列生成

    • 創(chuàng)建矩陣
    > y <- matrix(1:20, nrow=5, ncol=4)
         [,1] [,2] [,3] [,4]
    [1,]    1    6   11   16
    [2,]    2    7   12   17
    [3,]    3    8   13   18
    [4,]    4    9   14   19
    [5,]    5   10   15   20
    
    > cells <- c(1,4,6,10)
    > rname <- c("r1","r2")
    > cname <- c("c1","c2")
    > mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rname, cname))
    mymatrix        #byrow=TRUE按行填充
        c1  c2
    r1  1   4
    r2  6   10
    
    > diag(1:4)                 #生成對角矩陣
       [,1] [,2] [,3] [,4]
    [1,] 1 0 0 0
    [2,] 0 2 0 0
    [3,] 0 0 3 0
    [4,] 0 0 0 4
    > diag(4)                   #4階單位陣
       [,1] [,2] [,3] [,4]
    [1,] 1 0 0 0
    [2,] 0 1 0 0
    [3,] 0 0 1 0
    [4,] 0 0 0 1
    
    • 矩陣索引
    mymatrix <- matrix(1:20, nrow=5, ncol=4)
    > mymatrix[1,2]       #選擇矩陣里的元素[行, 列]
    6
    > mymatrix[1:2,2:3]   #第1 2行契吉,2 3列的元素
         [,1] [,2]
    [1,]    6   11
    [2,]    7   12
    
    • 矩陣的運算
    A+10                #所有元素加10
    A*2                 #所有元素乘2
    A*A                 #所有元素乘自己
    A%*%B               #矩陣相乘【A(m,n)的列數(shù)(column)與B(n,p)的行數(shù)(row)相同才行,得到是一個m行诡渴,p列的矩陣】
    dim()               #返回行捐晶、列數(shù)(如果是array,返回每個維度的行列數(shù)
    str(object)         #顯示某個對象的結構
    class(object)       #顯示某個對象的類或類型
    nrow()              #返回行數(shù)
    ncol()              #返回列數(shù)
    solve()             #返回逆矩陣【逆矩陣:兩個矩陣相乘等于一個單位矩陣(見上)】
    solve(a,b)          #a*x=b妄辩,求x惑灵。得出的是x的值。
    as.matrix()         #把非矩陣的轉換成矩陣
    is.matrix()         #辨別是否矩陣
    diag()              #返回對角元素或生成對角矩陣
    eigen()             #求特征值和特征向量
    chol()              #Choleski 分解  【眼耀?英支??】
    svd()               #奇異值分解     【哮伟?干花??】
    qr()                #QR 分解        【楞黄?池凄??】
    det()               #求行列式
    t()                 #矩陣轉置
    apply(X, MARGIN, FUN, ...)      #對矩陣應用函數(shù)谅辣。x:矩陣名修赞;MARGIN:運算范圍,1/按行運算,2/按列運算柏副;FUN:調用的函數(shù)勾邦。得到一個向量。
    rbind()             #合并兩個或兩個以上的矩陣割择,按行合并眷篇。(列數(shù)不變
    cbind()             #按列合并。(行數(shù)不變
    
  3. 數(shù)組:函數(shù)array()

    • 簡單說一下荔泳。
    > dim1 <- c("A1","A2")
    > dim2 <- c("B1","B2","B3")
    > dim3 <- c("C1","C2","C3","C4")
    > z <- array(1:24, c(2, 3, 4), dimnames = list (dim1, dim2, dim3))
    > z
    , , C1
    
       B1 B2 B3
    A1  1  3  5
    A2  2  4  6
    
    , , C2
    
       B1 B2 B3
    A1  7  9 11
    A2  8 10 12
    
    , , C3
    
       B1 B2 B3
    A1 13 15 17
    A2 14 16 18
    
    , , C4
    
       B1 B2 B3
    A1 19 21 23
    A2 20 22 24
    
  4. 數(shù)據(jù)框:最常見的數(shù)據(jù)結構data.frame()

    • 矩陣形式的數(shù)據(jù)必須是同一類型的蕉饼,但數(shù)據(jù)框中各列可以是不同類型的數(shù)據(jù)。
    • 每一列長度一致玛歌∶粮郏可以是向量、因子支子、數(shù)據(jù)矩陣创肥、列表、或其他數(shù)據(jù)框值朋。
    • 字符向量會被強制轉換成因子
    > patientID<-c(1,2,3,4)
    > age<-c(25,34,28,52)
    > diabetes<-c("Type1","Type2","Type1","Type1")
    > status<-c("Poor","Improved","Excellent","Poor")
    > patientdata<-data.frame(patientID, age, diabetes, status)
    > patientdata
      patientID age diabetes    status
    1         1  25    Type1      Poor
    2         2  34    Type2  Improved
    3         3  28    Type1 Excellent
    4         4  52    Type1      Poor    
    
    patientdata[1:2]           # 選取列
    patientdata[1:2,]          # 選取行
    patientdata[c("diabetes","status")]     # 用列名選取
    patientdata$age                         # 用列名選取的另一種方法
    table(patientdata$diabetes, patientdata$status)       # 名義變量做交叉列聯(lián)表叹侄。
    
    • 使用attach()/detach()和with():可以不用寫數(shù)據(jù)框的名字,直接用數(shù)據(jù)庫中列名昨登。
    attach(patientdata)
    summary(age)
    detach(patientdata)
    
    with(patientdata,{
        summary(age)
        })
    
  5. 因子factor()

    • 分類數(shù)據(jù)
    • factor(data, levels, labels,...)
    # factors把字符型的名義變量 變?yōu)?用數(shù)字代表類別。常用于離散型數(shù)據(jù)丰辣。
    patientID<-c(1,2,3,4)
    age<-c(25,34,28,52)
    diabetes<-c("Type1","Type2","Type1","Type1")
    status<-c("Poor","Improved","Excellent","Poor")
    diabetes<-factor(diabetes); diabetes
    status<-factor(status, order=T, levels = c("Poor", "Improved","Excellent"));status          
    # order = T撒强,有序性因子,按字母排序笙什。用levels設定順序尿褪。
    patientdata<-data.frame(patientID, age, diabetes, status)
    str(patientdata)                  # 查看dataframe
    summary(patientdata)
    
  6. 列表list

    • list是一個對象的有序合集,包含的對象叫做components/分量得湘。
    • 語句list(變量1=分量1, 變量2=分量2顿仇,……)
    • 函數(shù)length()淘正、 mode()、 names()可以分別返回列表的長度(分量的數(shù)目)臼闻、數(shù)據(jù)類型鸿吆、列表里成分的名字。
    • 元素可以不同類型述呐。迭代惩淳。雙層中括號[[]]選擇元素,第一維是名稱,第二維才是數(shù)值思犁。
    # 創(chuàng)建列表
    #1. 使用list()
    > j <- list(name="Joe",salary=55000, union=T); j
    $name
    [1] "Joe"
    
    $salary
    [1] 55000
    
    $union
    [1] TRUE
    
    #2. 把向量轉為列表形式
    z <- vector(mode="list")  
    z[["list"]] <- 3   
    
    # 列表索引
    > j$salary
    [1] 55000    
    
    j[["salary"]]           #注意單層中括號和雙層中括號的區(qū)別
    j[[2]]
    j[1:2]
    
    # 增加列
    j$sex<-"M"              #增加一個叫做“sex”的列
    
    j[6:8]<-c(E,F,T);j      #增加三列代虾,分別叫做E/F/T,位置在6到8.
    
    # 刪除列
    j$sex<-NULL;j           #sex這列就不見了
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末激蹲,一起剝皮案震驚了整個濱河市棉磨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌学辱,老刑警劉巖乘瓤,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異策泣,居然都是意外死亡衙傀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門萨咕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來统抬,“玉大人,你說我怎么就攤上這事任洞⌒罾” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵交掏,是天一觀的道長妆偏。 經(jīng)常有香客問我,道長盅弛,這世上最難降的妖魔是什么钱骂? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮挪鹏,結果婚禮上见秽,老公的妹妹穿的比我還像新娘。我一直安慰自己讨盒,他們只是感情好解取,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著返顺,像睡著了一般禀苦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遂鹊,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天振乏,我揣著相機與錄音,去河邊找鬼秉扑。 笑死慧邮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播误澳,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼耻矮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了脓匿?” 一聲冷哼從身側響起淘钟,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陪毡,沒想到半個月后米母,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡毡琉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年铁瞒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桅滋。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡慧耍,死狀恐怖,靈堂內的尸體忽然破棺而出丐谋,到底是詐尸還是另有隱情芍碧,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布号俐,位于F島的核電站泌豆,受9級特大地震影響,放射性物質發(fā)生泄漏吏饿。R本人自食惡果不足惜踪危,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猪落。 院中可真熱鬧贞远,春花似錦、人聲如沸笨忌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官疲。三九已至杂曲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袁余,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工咱揍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颖榜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像掩完,于是被迫代替她去往敵國和親噪漾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容

  • 【1】7且蓬,9欣硼,-1,5恶阴,( ) A诈胜、4;B冯事、2焦匈;C、-1昵仅;D缓熟、-3 分析:選D,7+9=16摔笤;9+(-1)=8够滑;(...
    Alex_bingo閱讀 18,821評論 1 19
  • 這學期開了統(tǒng)計機器學習的課程,鑒于薄弱的概率論與統(tǒng)計學基礎吕世,學著還比較吃力彰触,但是R語言的實踐,還是令人興趣十足寞冯。接...
    CharlesSun9閱讀 4,642評論 1 6
  • 2016年5月11日星期三晴 我給大家介紹一本太空百科全書渴析,她室友中國大百科全書出版社。里面有很多內容比如說:探...
    仔哥閱讀 833評論 0 0
  • “從窗邊走過時吮龄,看你很惆悵……”這是一位朋友對我在新公司的評論俭茧。確實當我不在只是路過這個地方,真實的融入了其...
    紅玉rainbow閱讀 231評論 1 1
  • 這是我以身試法,做的一套刻意練習尝抖。之前我和朋友討論過一個問題毡们,相比較寫作,健身相對容易堅持昧辽。因為寫作還是相對靠靈感...
    shimashima閱讀 1,211評論 4 1