<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          R語(yǔ)言基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)

          2022-02-09 13:45

          本文內(nèi)容

          • 對(duì)象
          • 向量
          • 數(shù)據(jù)結(jié)構(gòu)
          • 運(yùn)算符及向量運(yùn)算
          • 函數(shù)
          • 子集選取

          對(duì)象

          對(duì)象

          R語(yǔ)言里一切都是對(duì)象(object)

          對(duì)象的創(chuàng)建

          對(duì)象的創(chuàng)建與使用。首先確定一個(gè)對(duì)象名,然后使用賦值操作符 <-,將數(shù)據(jù)賦值給它。

          在Rstudio中同時(shí)按下 Alt-,就可以產(chǎn)生賦值箭頭

          對(duì)象的創(chuàng)建與使用

          我們給這個(gè)盒子取名 x,然后把10這個(gè)數(shù)放入盒子。

          x <- 10

          當(dāng)鍵入 x 然后回車(chē),就打印出 x 的值。

          x

          對(duì)象重新賦值

          當(dāng)我們?cè)侔?這個(gè)數(shù)放入盒子x

          x <- 6

          此時(shí)x就被更新了,變成了最新的數(shù)值

          x

          變量命名規(guī)則

          • 變量名必須以字母、數(shù)字、下劃線(xiàn)_和句點(diǎn).組成
          • 開(kāi)頭不能是數(shù)字
          • 大小寫(xiě)敏感,yY是兩個(gè)不同的變量名
          • 不能有空格,可以用下劃線(xiàn)代替空格,比如
          my_age <- 30

          變量名的可讀性

          測(cè)量男生的身高

          • 一般的變量名
          x <- 175
          • 不錯(cuò)變量名
          height <- 175
          • 更佳的變量名
          boy_height_cm <- 175

          對(duì)象屬性

          x <- 6

          所有R對(duì)象都有其屬性,最重要的兩個(gè)屬性:

          • 類(lèi)型
          • 長(zhǎng)度
          typeof(x) 
          length(x)

          向量

          盒子可以裝更多數(shù)據(jù)

          前面,我們把6這個(gè)數(shù)放入盒子 x,

          x <- 6

          現(xiàn)在,我們想多裝一些數(shù)據(jù)(有順序、好取出),比如3,4,5,6,7

          x <- 3, 4, 5, 6, 7   # 這樣可以嗎?

          冰糖葫蘆

          我們小時(shí)候吃的冰糖葫蘆,中間用一根木棒把水果串起來(lái),有先后順序,而且方便取出。

          knitr::include_graphics("images/vector_like11.jpg", dpi = 300)

          向量就像冰糖葫蘆

          對(duì)應(yīng)到R語(yǔ)言里,用 c() 函數(shù)實(shí)現(xiàn)類(lèi)似結(jié)構(gòu)

          x <- c(3, 4, 5, 6, 7)
          x

          向量就像冰糖葫蘆

          x <- c(3, 4, 5, 6, 7)

          我們觀(guān)察到c()函數(shù)構(gòu)造向量的幾個(gè)要求

          • 這里的c就是 combine 或 concatenate 的意思
          • 它要求元素之間用英文的逗號(hào)分隔
          • 且元素的數(shù)據(jù)類(lèi)型是統(tǒng)一的,比如這里都是數(shù)值

          聚合成新向量

          c() 函數(shù)還可以把兩個(gè)向量聚合成一個(gè)新的向量。

          low      <- c(1, 2, 3)
          high <- c(4, 5, 6)
          sequence <- c(low, high)
          sequence

          命名向量(named vector)

          向量元素可以有自己的名字

          x <- c('a' = 5, 'b' = 6, 'c' = 7, 'd' = 8)
          x

          或者

          x <- c(5, 6, 7, 8)
          names(x) <- c('a', 'b', 'c', 'd')
          x

          單個(gè)值的向量,就可以偷懶

          我們?cè)倩仡^看看之前的

          x <- 6

          它實(shí)際上就是

          x <- c(6)

          即長(zhǎng)度為 1 的向量,相當(dāng)于,只有一個(gè)草莓的糖葫蘆。在我看來(lái),x <- 6x <- c(6) 偷懶的寫(xiě)法。

          向量的屬性

          我們?cè)賮?lái)看看向量的兩個(gè)基本屬性

          x <- c(3, 4, 5, 6, 7)
          • 類(lèi)型
          typeof(x)
          • 長(zhǎng)度
          length(x)

          數(shù)值型向量

          向量的元素都是數(shù)值類(lèi)型,因此也叫數(shù)值型向量。

          數(shù)值型的向量,有 integer 和 double 兩種:

          x <- c(1L, 5L, 2L, 3L)    # 整數(shù)型 
          x <- c(1.5, -0.5, 2, 3) # 雙精度類(lèi)型,常用寫(xiě)法
          x <- c(3e+06, 1.23e2) # 雙精度類(lèi)型,科學(xué)計(jì)數(shù)法

          數(shù)值型向量,偷懶方法1

          但如果向量元素很多,用手工一個(gè)個(gè)去輸入,實(shí)際運(yùn)用中不現(xiàn)實(shí)。在特定情況下,有幾種偷懶方法:

          • seq() 函數(shù)可以生成等差數(shù)列,from 參數(shù)指定數(shù)列的起始值,to 參數(shù)指定數(shù)列的終止值,by 參數(shù)指定數(shù)值的間距:
          s1 <- seq(from = 0, to = 10, by = 0.5)
          s1

          數(shù)值型向量,偷懶方法2

          • rep() 是 repeat(重復(fù))的意思,可以用于產(chǎn)生重復(fù)出現(xiàn)的數(shù)字序列:

            • times 指定要生成的個(gè)數(shù)
            • each ?指定每個(gè)元素重復(fù)的次數(shù)
          s2 <- rep(x = c(0, 1), times = 3)
          s2

          s3 <- rep(x = c(0, 1), each = 3)
          s3

          數(shù)值型向量,偷懶方法3

          • m:n,如果單純是要生成數(shù)值間距為1的數(shù)列,用 m:n 更快捷,它產(chǎn)生從 m 到 n 的間距為1的數(shù)列
          # Colon operator (with by = 1):
          s4 <- 0:10
          s4
          s5 <- 10:1
          s5

          字符串型向量

          字符串(String)數(shù)據(jù)類(lèi)型,實(shí)際上就是文本類(lèi)型,必須用單引號(hào)或者是雙引號(hào)包含

          x <- c("a", "b", "c")    
          x <- c('Alice', 'Bob', 'Charlie', 'Dave')
          x <- c("hello", "baby", "I love you!")

          需要注意的是,x1是字符串型向量,x2是數(shù)值型向量

          x1 <- c("1", "2", "3")
          x2 <- c(1, 2, 3)

          邏輯型向量

          邏輯型常稱(chēng)為布爾型(Boolean):

          • 常量值只有 TRUE 和 FALSE。
          • TRUE 和 FALSE 在R語(yǔ)言中是保留詞匯
          x <- c(TRUE, TRUE, FALSE, FALSE)
          x <- c(T, T, F, F) # 與上等價(jià),但不推薦

          以下兩者不要混淆

          x <- c(TRUE, FALSE)             # 邏輯型
          x <- c("TRUE", "FALSE") # 字符串型

          因子型向量

          因子型可以看作是字符串向量的增強(qiáng)版,它是帶有層級(jí)(Levels)信息的字符串向量。

          比如,這里四個(gè)季節(jié)的名稱(chēng),他們構(gòu)成一個(gè)向量。

          four_seasons <- c("spring", "summer", 
          "autumn", "winter")

          我們使用 factor() 函數(shù)將其轉(zhuǎn)換成因子型向量

          four_seasons_factor <- factor(four_seasons)
          four_seasons_factor

          因子型向量

          查看因子型向量的時(shí)候,同時(shí)也顯示層級(jí)信息

          • 默認(rèn)的情況,它是按照字符串首字母的順序排序
          four_seasons_factor <- factor(four_seasons)
          four_seasons_factor
          • 也可以指定順序,比如按照我對(duì)四個(gè)季節(jié)的喜歡排序
          four_seasons_factor <- factor(
          four_seasons,
          levels = c("summer", "winter", "spring", "autumn")
          )
          four_seasons_factor

          小結(jié)

          前面介紹了向量,它是R語(yǔ)言中最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),我們還會(huì)遇到其它數(shù)據(jù)結(jié)構(gòu)

          • 矩陣
          • 列表
          • 數(shù)據(jù)框

          這些數(shù)據(jù)結(jié)構(gòu)都可以看作由向量衍生出來(lái)的。

          矩陣

          矩陣可以存儲(chǔ)行(row)和列(column)二維的數(shù)據(jù)

          它實(shí)際上是向量的另一種表現(xiàn)形式。

          矩陣

          矩陣可以用 matrix() 函數(shù)創(chuàng)建,第一位參數(shù)的位置是用于創(chuàng)建矩陣的向量。比如下面把向量c(2, 4, 3, 1, 5, 7) 轉(zhuǎn)換成2行3列的矩陣

          m <- matrix(
          c(2, 4, 3, 1, 5, 7),
          nrow = 2,
          ncol = 3
          )
          m

          矩陣

          矩陣的屬性

          • 類(lèi)型
          class(m)
          • 長(zhǎng)度
          length(m)
          • 維度
          dim(m)

          矩陣

          • 向量是一個(gè)豎著的糖葫蘆,在轉(zhuǎn)換成矩陣的時(shí)候,也是先豎著排,第一列豎著的方向排滿(mǎn)后,就排第二列,這是默認(rèn)的情形。

          • 如果想改變這一傳統(tǒng)習(xí)慣,也可以增加一個(gè)語(yǔ)句 byrow = TRUE,這條語(yǔ)句讓向量先橫著排,排完第一行,再排第二行。

          matrix(
          c(2, 4, 3, 1, 5, 7), nrow = 2, byrow = TRUE
          )

          列表

          想象有一個(gè)小火車(chē),小火車(chē)的每節(jié)車(chē)廂是獨(dú)立的,因此每節(jié)車(chē)廂裝的東西可以不一樣。這種結(jié)構(gòu),裝載數(shù)據(jù)的能力很強(qiáng)大,稱(chēng)之為列表(list)。

          創(chuàng)建列表

          list1 <- list(
          a = c(5, 10),
          b = c("I", "love", "R", "language", "!"),
          c = c(TRUE, TRUE, FALSE, TRUE)
          )
          list1

          創(chuàng)建列表

          列表

          c() 函數(shù)創(chuàng)建向量 Vs. list() 函數(shù)創(chuàng)建列表

          • 相同點(diǎn):元素之間用逗號(hào)分開(kāi)。
          • 不同點(diǎn)
          • 向量的元素是單個(gè)值;列表的元素可以是更復(fù)雜的結(jié)構(gòu),可以是向量、矩陣或者列表。
          • 向量要求每個(gè)元素的數(shù)據(jù)類(lèi)型必須相同,要么都是數(shù)值型,要么都是字符型;而列表的元素允許不同的數(shù)據(jù)類(lèi)型。

          列表的屬性

          • 類(lèi)型
          class(list1)
          • 長(zhǎng)度
          length(list1)

          數(shù)據(jù)框

          列表是一個(gè)小火車(chē),如果每節(jié)車(chē)廂裝的都是向量而且等長(zhǎng),那么這種特殊形式的列表就變成了數(shù)據(jù)框 (data frame)

          創(chuàng)建數(shù)據(jù)框

          我們可以使用 data.frame() 函數(shù)構(gòu)建

          df <- data.frame(
          name = c("Alice", "Bob", "Carl", "Dave"),
          age = c(23, 34, 23, 25),
          marriage = c(TRUE, FALSE, TRUE, FALSE),
          color = c("red", "blue", "orange", "purple")
          )
          df

          數(shù)據(jù)框就是我們經(jīng)常用的excel表格

          由于數(shù)據(jù)框融合了向量、列表和矩陣的特性,所以在數(shù)據(jù)科學(xué)的統(tǒng)計(jì)建模和可視化中運(yùn)用非常廣泛。

          數(shù)據(jù)框的屬性

          • 類(lèi)型
          class(df)
          • 維度
          nrow(df)
          ncol(df)

          數(shù)據(jù)結(jié)構(gòu)

          R 對(duì)象的數(shù)據(jù)結(jié)構(gòu)(向量、矩陣、列表和數(shù)據(jù)框),總結(jié)如下


          瀏覽 133
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  翔田千里中文字幕 | 国产精品久久久久久久久久久久久久久 | 黄色二区 | 天天射天天爽 | 亚洲天堂性爱 |