1. R語言基礎數(shù)據(jù)結構

        2022-02-09 13:45

        本文內(nèi)容

        • 對象
        • 向量
        • 數(shù)據(jù)結構
        • 運算符及向量運算
        • 函數(shù)
        • 子集選取

        對象

        對象

        R語言里一切都是對象(object)。

        對象的創(chuàng)建

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

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

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

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

        x <- 10

        當鍵入 x 然后回車,就打印出 x 的值。

        x

        對象重新賦值

        當我們再把6這個數(shù)放入盒子x

        x <- 6

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

        x

        變量命名規(guī)則

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

        變量名的可讀性

        測量男生的身高

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

        對象屬性

        x <- 6

        所有R對象都有其屬性,最重要的兩個屬性:

        • 類型
        • 長度
        typeof(x) 
        length(x)

        向量

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

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

        x <- 6

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

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

        冰糖葫蘆

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

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

        向量就像冰糖葫蘆

        對應到R語言里,用 c() 函數(shù)實現(xiàn)類似結構

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

        向量就像冰糖葫蘆

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

        我們觀察到c()函數(shù)構造向量的幾個要求

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

        聚合成新向量

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

        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

        單個值的向量,就可以偷懶

        我們再回頭看看之前的

        x <- 6

        它實際上就是

        x <- c(6)

        即長度為 1 的向量,相當于,只有一個草莓的糖葫蘆。在我看來,x <- 6x <- c(6) 偷懶的寫法。

        向量的屬性

        我們再來看看向量的兩個基本屬性

        x <- c(3, 4, 5, 6, 7)
        • 類型
        typeof(x)
        • 長度
        length(x)

        數(shù)值型向量

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

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

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

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

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

        • 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(重復)的意思,可以用于產(chǎn)生重復出現(xiàn)的數(shù)字序列:

          • times 指定要生成的個數(shù)
          • each ?指定每個元素重復的次數(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ù)類型,實際上就是文本類型,必須用單引號或者是雙引號包含

        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)

        邏輯型向量

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

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

        以下兩者不要混淆

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

        因子型向量

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

        比如,這里四個季節(jié)的名稱,他們構成一個向量。

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

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

        four_seasons_factor <- factor(four_seasons)
        four_seasons_factor

        因子型向量

        查看因子型向量的時候,同時也顯示層級信息

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

        小結

        前面介紹了向量,它是R語言中最基礎的數(shù)據(jù)結構,我們還會遇到其它數(shù)據(jù)結構

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

        這些數(shù)據(jù)結構都可以看作由向量衍生出來的。

        矩陣

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

        它實際上是向量的另一種表現(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

        矩陣

        矩陣的屬性

        • 類型
        class(m)
        • 長度
        length(m)
        • 維度
        dim(m)

        矩陣

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

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

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

        列表

        想象有一個小火車,小火車的每節(jié)車廂是獨立的,因此每節(jié)車廂裝的東西可以不一樣。這種結構,裝載數(shù)據(jù)的能力很強大,稱之為列表(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)建列表

        • 相同點:元素之間用逗號分開。
        • 不同點
        • 向量的元素是單個值;列表的元素可以是更復雜的結構,可以是向量、矩陣或者列表。
        • 向量要求每個元素的數(shù)據(jù)類型必須相同,要么都是數(shù)值型,要么都是字符型;而列表的元素允許不同的數(shù)據(jù)類型。

        列表的屬性

        • 類型
        class(list1)
        • 長度
        length(list1)

        數(shù)據(jù)框

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

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

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

        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ù)科學的統(tǒng)計建模和可視化中運用非常廣泛。

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

        • 類型
        class(df)
        • 維度
        nrow(df)
        ncol(df)

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

        R 對象的數(shù)據(jù)結構(向量、矩陣、列表和數(shù)據(jù)框),總結如下


        瀏覽 133
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 一级毛片全部免费播放特黄 | 人妖炮机调教前列腺高潮 | 性爱网站免费观看 | 美国一级大黄一片免费的网站 | 欧美黄在线观看 |