<strike id="rrvnz"></strike>

    <noframes id="rrvnz">
    <noframes id="rrvnz"><span id="rrvnz"><pre id="rrvnz"></pre></span><address id="rrvnz"></address>
    <address id="rrvnz"><nobr id="rrvnz"></nobr></address><noframes id="rrvnz">
      <em id="rrvnz"></em>

        首 頁IT知識庫翔宇問吧收藏內容
        當前位置:翔宇亭IT樂園IT知識庫R語言

        R語言中向量的使用

        減小字體 增大字體 作者:本站  來源:本站原創  發布時間:2017-10-05 10:27:28

        在《R語言的數據對象》一文中提到,R語言的數據對象從結構角度劃分,可以分為向量、數組、矩陣、因子、列表和數據框6種。本文首先探討一下R語言中向量的使用方法。

        在R語言中,向量(Vector)是相同基本類型元素組成的序列,相當于一維數組。

        向量的元素可以是數值型、字符型、邏輯值型和復數型,對應分別稱為數值型向量、字符串型向量、邏輯型向量和復數型向量。

        向量中可以包含一個元素,也可以包含多個元素。

        同一個向量中的數據類型應該相同。

        1、向量的創建

        (1)直接創建

        x1<-1:10  #輸出:[1] 1 2 3 4 5 6 7 8 9 10

        x2<-4.3  #只包含一個值的向量

        x3<-TRUE #邏輯型向量,注意在R中,TRUE和FALSE必須大寫

        x4 <- "I Love China"   #字符串型向量

        在R語言中,<-表示賦值,即右側的值賦給左側的變量。在R語言中,->的寫法也是正確的,即把左側的賦給右側的變量。但等號=不是R語言的標準語法,在有些情況下可能會出現問題,不建議使用。

        在R語言中#是注釋符,即#后面的內容是注釋的內容,是對該行內容的一個解釋。

        本部分在Windows R3.4.1中的執行情況見下圖:

        R語言中向量的創建

        (2)使用c()函數創建

        使用c()函數可以創建多個值的向量

        v1 <- c(1,3,4,9,10)   #輸出1 3 4 9 10

        v1 <- c(1:10)   #創建1到10的向量  輸出:1 2 3 4 5 6 7 8 9 10

        v2<- c("Male","Female", "Female", "Male")   #字符串型向量

        v3<- c(TRUE,FALSE,FALSE,TRUE)   #邏輯型向量

        v4 <- c() #一個不包含任何值的向量 輸出NULL

        在R語言中,c()函數可以有任意多個參數。

        本部分的執行情況見下圖:

        R語言中使用c()函數創建向量

        (3)使用seq函數生成等差序列的向量

        seq函數的原型如下:

        seq(from=1,to=1,by=((to-from)/(length.out - 1)),length.out = NULL,along.with = NULL,...)

        其中,from是首項,默認為1;to是末項,默認為1;by是步長或等差增量,可以為負數;length.out是向量的長度;along.with:用于指明該向量與另外一個向量的長度相同,along.with后應為另外一個向量的名字。

        s1 <- seq(1,10,2)  #向量從1開始,步長為2,最大不超過10,這里輸出:1 3 5 7 9

        s2 <- seq(1,9,length.out = 5)  # 輸出1 3 5 7 9,這里的步長是根據(9 - 1)/(5-1)計算出來的

        s3 <- seq(3,by=3,length.out=5)  #輸出3 6 9  12 15

        s4 <- seq(by=3,along.with = s3)  #輸出1 4 7 10 13,未指定from項時,默認從1開始,長度與向量s3相同

        s5 <- seq(length.out = 3)  #輸出1 2 3

        s6 <- seq(along.with = s5)  #輸出 1 2 3

        s7 <- seq(9,by=-2,length.out=6)  # 9 7 5 3 1 -1

        進一步說明:這里的from, to,by項可以為任意實數,即也可以為浮點數。

        本部分的執行情況見下圖:

        R語言中使用seq()函數創建等差序列

        (4)使用rep函數創建重復序列的向量

        rep函數可以將某一向量重復若干次,該函數的原型如下:

        rep(x , times = 1, length.out = NA,  each = 1)

        參數中,x為要重復的序列對象;times為重復的次數,默認為1;length.out為產生的向量長度,默認為NA(未限制);each為每個元素重復的次數,默認為1。

        r1 <- rep(1:3,2)  #輸出: 1 2 3 1 2 3   前面的序列按原順序重復2次

        r2 <- rep(1:3, each =2)  # 輸出 1 1 2 2 3 3 序列中的每個元素重復2次

        r3 <- rep(c(2,5),c(3,4)) #輸出2 2 2 5 5 5 5 5將向量c(2, 5)按照后面給出的次數向量依次重復3次和4次

        r4 <- rep(c(2,4,6),each=2 ,length.out = 5) #輸出2 2 4 4 6  由于規定長度為5,這里僅有5項

        r5 <- rep(c(2,4,6),each=2,times=3)  #輸出2 2 4 4 6 6 2 2 4 4 6 6 2 2 4 4 6 6 每項2次,整體3次

        r6 <- rep(c(2,4,6),times=3,length.out=5) #輸出2 4 6 2 4 整體應該重復3次,但這里規定了長度,所以只有5項

        本部分的執行情況見下圖:

        R語言中使用rep函數創建重復序列

        2、為向量的每個元素命名

        vn <- c(11,22,33,44)

        names(vn) <- c("one","two","three","four")  #對應元素的名字分別為one, two, three, four

        本部分的執行情況見下圖:

        R語言中給向量元素命名

        3、向量的引用

        vc <- c(11,22,33,44,55,66)   #創建一個向量

        (1)使用元素的位置引用

        ① vc[1]  #提取第一個元素值:11

        ② vc[1:3] #提取1~3個元素的值:11 22 33

        ③ vc[c(2,4,5)]  #提取第2、第4和第5個元素的值:22 44 55

        ④ vc[-1] #提取除第一個元素之外的元素值:22 33 44 55 66

        ⑤ vc[-(1:3)] #提取除1~3個元素之外的元素值:44 55 66

        ⑥ vc[-c(2,4,5)] #提取除第2、第4和第5個之外的元素值:11 33 66

        (2)使用邏輯向量

        ⑦ vc[c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE)] #提取對應位置為TRUE的元素值:11 22 55

        ⑧ vc[c(TRUE,FALSE)] #輸出11 33 55 這里的c(TRUE,FALSE)自動補齊到與vc向量長度相同,c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE)

        ⑨ vc[c(TRUE,TRUE,FALSE)] #輸出11 22 44 55

        (3)使用元素名字

        names(vc) <- c("one","two","three","four","five","six")  #為每個元素命名為one,two,three,four,five,six

        ⑩ vc["one"] #輸出11(在此值上方會有其名字one)  這種方法只能用于訪問一個元素的情況

        ⑪vc[c("one","three","six")] #輸出11 33 66 (其上方會帶有其對應的名字)

        (4)使用which函數進行篩選

        ⑫which(vc==11) # 找出向量vc中元素值為11的元素位置:這里輸出1,即11在vc中的位置為1

        ⑬which(vc==11|vc==33)) #找出向量vc中元素值為11或33的元素所在位置:1 3

        ⑭which(vc>11 & vc<=44)#找出元素值大于11且小于44的元素所在位置:2 3 4

        ⑮which.max(vc) #最大元素值所在的位置:6

        ⑯which.min(vc) #最小元素所在的位置:1

        (5)使用subset函數索引

        可以使用subset函數找出向量中滿足給定條件的向量元素值,語法格式如下:

        subset(向量名,邏輯條件)

        ⑰subset(vc,vc>11 & vc<55)  #得到 22 33 44

        ⑱subset(vc,c(TRUE,FALSE,TRUE))  #11 33 44 66  邏輯向量通過重復自動補齊

        (6)match函數

        該函數的原型為:

        match(x,y)  

        該函數返回的是x中的每個元素在y中對應的位置,如果x中的元素在y中不存在,則該位置返回NA

        ⑲match(vc,c(11,22))  # 1 2 NA NA NA NA  因為x中的33 44 55 66在c(11,22)中不存在,所以后面4個為NA

        ⑳match(vc,c(11,33,55,66,88,99)) # 1 NA 2 NA 3 4  vc中的22在給定的序列中不存在所以第2個為NA,33在給定的序列位置為2,所以vc中的第3個元素位置為2...

        4、向量的編輯

        (1)擴展向量

        vc<-c(11,22,33,44)  #創建一個向量

        vc <-c(vc,c(55,66))  #給vc擴展,增加了2個元素55和66

        vc <- append(vc,77)  #在向量最后追加一個新元素77

        vc <- append(vc,c(88,99))  #在向量后追加連個元素88和99

        vc<- append(vc,100,3)  #在第3個元素后追加一個新元素100 :11 22 33 100 44 55 66 77 88 99

        說明,使用append追加元素會生成一個新的向量,不是直接在原向量中追加,看下面的例子:

        vc<- c(11,22,33)

        append(vc,c(44,55))

        若重新輸出vc,會發現vc的向量值元素仍然為:11 22 33,并沒有發生變化

        只有這樣vc <- append(vc,c(44,55)),重新打印vc的值為:11 22 33 44 55

        (2)改變元素的值

        vc[1] <- 111  #向量vc的第一個元素值變為111

        vc[1:3] <- 111  #向量vc中第1~第3個元素的值都變為111

        vc[1:3] <- c(111,222,333) #向量vc中第1~第3個元素的值分別被修改為111 222 333

        vc[vc>33] <- 11  #將向量vc中的所有元素值大于33的元素值修改為11

        vc[vc==33] <- 11 #將向量vc中元素值為33的元素值修改為11

        (3)刪除元素

        vc<-vc[-1]  #從vc中刪除了位置為1的元素

        vc<-vc[-c(3:5)] #從vc中刪除了位置為3,4,5的元素

        vc<-vc[c(2:4)] #刪除了出位置為2,3,4之外的元素

        5、向量的排序

        (1)sort函數

        sort函數原型如下:

        sort(x, decreasing=FALSE,na.last = NA,index.return = FALSE,...)

        x為要排序的對象,decreasing為排序順序,是否為降序,默認為FALSE,即升序;na.last是對NA(mising value 或者Not available)值的處理,若為TRUE,則NA值將放在最后,若為FALSE,NA值將放在最前面,若為NA,則排序時剔除掉NA值;index.return是個邏輯值,設置是否顯示排序序列對應的元素值在未排序前序列中的對應位置索引,默認為FALSE。

        sort可以使用的的形式如下:

        sort(vc)  #默認升序排序,NA值不參與排序,且被剔除掉,即若vc中有NA值的話,排序后的序列中不含有NA值

        sort(vc,decreasing = TRUE)  #降序排序,NA值默認被剔除掉

        sort(vc,na.last = TRUE) #默認升序排序,NA值不被剔除掉,且放在排序序列的后面

        注意:排序生成新的序列,不會影響原向量的值及順序

        (2)rev函數

        rev函數將向量倒序,即將原向量的元素按位置翻轉

        vc <- c(11,44,33,22,77,66)  #創建一個向量

        rev(vc)   #66  77 22 33 44 11

        6、用于向量的一些函數

        (1)求和函數sum()

        v <- c(1:10)  #創建一個新向量:1 2 3 4 5 6 7 8 9 10

          sum(vc)  #  55

        (2)求最大值函數max()

           max(v)  # 10

        (3)求最小值函數min()

           min(v)   # 1

        (4)求均值函數mean()

          mean(v)  # 5.5

        (5)求中位數函數median()

          median(v)  # 5.5

          v1<- c(1:9)  # 創建一個新向量:1 2 3 4 5 6 7 8 9

          median(v1)  # 5

        (6)range()函數

          相當于c(min(x), max(x))

          range(v)  # 1 10

          range(v1) #1 9

        (7)求方差函數var()

          var(v)  #9.166667

          var(v1) # 7.5

        (8)求標準差函數 sd()

          sd(v)  #3.02765

          sd(v1) #2.738613

        (9)求向量元素值連乘積prod()

          prod(v)  #3628800

          prod(v1) #362880

        (10)累加和向量函數cumsum(x)

         結果是一個向量,長度與x相同,每一項的值是該項與前一項累加后的值

        cumsum(v1)   #1  3  6 10 15 21 28 36 45

        cumsum(v)   #1  3  6 10 15 21 28 36 45 55

        (完)

        本文為原創,若轉載請注明出處:R語言中向量的使用——翔宇亭IT樂園

        Tags:R語言 向量

        知識評論評論內容只代表網友觀點,與本站立場無關!

           評論摘要(共 2 條,得分 200 分,平均 100 分) 查看完整評論
        [回復] 2我的天啊   打分:100 分  發表時間:2018-09-06
        · 好文章,必須留下我的態度。
        [回復] 1贊贊   打分:100 分  發表時間:2018-01-13
        · 很详细的,禁不住点个赞
        愿您的精彩評論引起共鳴,帶來思考和價值。
        用戶名: 查看更多評論
        分 值:100分 90分 80分 70分 60分 40分 20分
        內 容:
        驗證碼:
        關于本站 | 網站幫助 | 廣告合作 | 網站聲明 | 友情連接 | 網站地圖
        本站部分內容來自互聯網,如有侵權,請來信告之,謝謝!
        Copyright © 2007-2020 biye5u.com. All Rights Reserved.
        特黄特色三级在线观看 - 视频 - 在线观看 - 影视资讯 -心晴网