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

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

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

概念

數(shù)據(jù)結(jié)構(gòu)是計算機(jī)存儲、組織數(shù)據(jù)的方式

數(shù)據(jù)結(jié)構(gòu)是指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素集合

R中常見的數(shù)據(jù)結(jié)構(gòu)

  • 向量
  • 矩陣
  • 數(shù)據(jù)框:經(jīng)常使用的一種數(shù)據(jù)結(jié)構(gòu)
  • 列表
  • 因子

R中常見的數(shù)據(jù)結(jié)構(gòu)

  • 數(shù)值型:數(shù)值可以用于直接結(jié)算,加減乘除
  • 字符串型:可以進(jìn)行連接,轉(zhuǎn)換,提取等
  • 邏輯型:真或者假
  • 日期型

1.2 向量

向量概述

向量是R語言中最基本的數(shù)據(jù)結(jié)構(gòu),向量必須由類型相同的元素組成

使用賦值符號“<-”和組合函數(shù)c(),可以創(chuàng)建各種類型的向量

> x<-c(1,2,3,4,5)
> x
[1] 1 2 3 4 5
> y <- c("one","two","there")
> y
[1] "one"   "two"   "there"
> z <- c(TRUE,FALSE,T,F)
> z
[1]  TRUE FALSE  TRUE FALSE

建立特殊的向量

> c(1:10)
 [1]  1  2  3  4  5  6  7  8  9 10

> seq(from=1,to=10)
 [1]  1  2  3  4  5  6  7  8  9 10
# from為起始值,to為終止值,by控制步幅
> seq(from=1,to=10,by=2)
 [1] 1 3 5 7 9
# length.out控制個數(shù)
> seq(from=1,to=10,length.out = 3)
 [1]  1.0  5.5 10.0
> seq(from=1,to=10,length.out = 3)
 [1]  1.0  5.5 10.0

> rep(2,5)
 [1] 2 2 2 2 2
# 一共重復(fù)5次
> rep(c(1,2,3),5)
 [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
# 每個重復(fù)5次
> rep(c(1,2,3),each=5)
 [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
# 每個重復(fù)3次,且總體重復(fù)2次
> rep(c(1,2,3),each=3,times=2)
 [1] 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3

訪問向量

  1. 通過數(shù)字索引進(jìn)行訪問
> x <- c(1:10)
> x
 [1]  1  2  3  4  5  6  7  8  9 10
# R語言中的索引位置從1開始
> x[1]
 [1] 1
# 可以一次用向量索引多個元素
> x[c(1,3,5)]
 [1] 1 3 5
# 索引負(fù)元素指顯示除負(fù)元素以外的所有元素
> x[-4]
 [1]  1  2  3  5  6  7  8  9 10
  1. 通過表達(dá)式進(jìn)行訪問
> x <- c(1:10)
# 輸出大于4的數(shù)
> x[x>4]
 [1]  5  6  7  8  9 10
# 輸出大于4小于8的數(shù)
> x[x>4 & x<8]
 [1] 5 6 7
# 判斷1是否在x中
> 1 %in% x
 [1] TRUE
# 將x中的數(shù)據(jù)定義為TRUE,并輸出為TRUE的元素
> x[1 %in% x]
 [1]  1  2  3  4  5  6  7  8  9 10
  1. 通過索引名進(jìn)行訪問
> x <- c(1:10)
> names(x) <- c("一","二","三","四","五","六","七","八","九","十")
> x["三"]
三 
 3 
> x
一 二 三 四 五 六 七 八 九 十 
 1  2  3  4  5  6  7  8  9 10 

向量運算

  1. 向量與數(shù)值的加減乘除

    > x <- 1:10
    # 對向量的運算都是對所有元素的操作
    > x + 2
     [1]  3  4  5  6  7  8  9 10 11 12
    > x - 3
     [1] -2 -1  0  1  2  3  4  5  6  7
    > x <- x + 1
    > x
     [1]  2  3  4  5  6  7  8  9 10 11
    # **是冪次運算
    > x ** 2
     [1]   4   9  16  25  36  49  64  81 100 121
    # %%是求余數(shù)
    > x %% 2
     [1] 0 1 0 1 0 1 0 1 0 1
    # %/%是整除運算
    > x %/% 2
     [1] 1 1 2 2 3 3 4 4 5 5
    
  1. 向量與向量的加減乘除

    > x <- 1:10
    > y <- seq(1,100,length.out = 10)
    > x + y
     [1]   2  14  26  38  50  62  74  86  98 110
    > x * y
     [1]    1   24   69  136  225  336  469  624  801 1000
    > x ** y
     [1]  1.000000e+00  4.096000e+03  9.414318e+10
     [4]  2.951479e+20  2.842171e+31  3.771117e+43
     [7]  4.183778e+56  2.760699e+70  8.464150e+84
    [10] 1.000000e+100
    > x %% y
     [1]  0  2  3  4  5  6  7  8  9 10
    > x %/% y
     [1] 1 0 0 0 0 0 0 0 0 0
    #向量運算長的必須是短的元素的整數(shù)倍,可以進(jìn)行循環(huán)
    
  2. 數(shù)學(xué)函數(shù)

    • abs:返回每個向量的絕對值
    • sqrt:計算平方根
    • log、log10:計算對數(shù)
    • exp:計算指數(shù)
    • ceiling:返回不小于向量的最小整數(shù)
    • floor:返回不大于向量的最大整數(shù)
    • trunc:返回整數(shù)部分
    • round:進(jìn)行四舍五入
  3. 統(tǒng)計函數(shù)

    • sum:向量所有元素之和
    • max:向量元素最大值
    • min:向量元素最小值
    • range:向量元素最大和最小值
    • mean:向量均值
    • var:向量方差
    • sd:向量標(biāo)準(zhǔn)差
    • prod:向量連乘積
    • median:向量中位數(shù)
    • quantile:向量分位數(shù)
    • which.min:最大值的索引值,還可以與其它統(tǒng)計函數(shù)結(jié)合

1.3 矩陣

矩陣的創(chuàng)建

矩陣的創(chuàng)建使用函數(shù)matrix(),元素數(shù)要超過行數(shù)與列數(shù)的乘積,可以只指定行數(shù)或列數(shù)

默認(rèn)情況下按照列排序,可使用關(guān)鍵字byrow改為按行排序

> x <- matrix(1:20,nrow = 4,ncol = 5,byrow = T)
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    6    7    8    9   10
[3,]   11   12   13   14   15
[4,]   16   17   18   19   20

給矩陣的行與列命名

可以通過dimnames()函數(shù)給矩陣的行或列命名,命名后可以根據(jù)名字進(jìn)行索引

還可以通過dim()函數(shù)創(chuàng)建矩陣

# 方式一:dimnames()
> x <- matrix(1:20,nrow = 4,ncol = 5,byrow = T)
> rnames <- c("R1","R2","R3","R4")
> cnames <- c("C1","C2","C3","C4","C5")
> dimnames(x) <- list(rnames,cnames)
> x
   C1 C2 C3 C4 C5
R1  1  5  9 13 17
R2  2  6 10 14 18
R3  3  7 11 15 19
R4  4  8 12 16 20

# 方式二:dim()
> dim(x) <- c(4,5)
> x
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    5    9   13   17
[2,]    2    6   10   14   18
[3,]    3    7   11   15   19
[4,]    4    8   12   16   20

1.4 數(shù)組

數(shù)組的創(chuàng)建

創(chuàng)建數(shù)組有兩種方式:一是通過函數(shù)dim()創(chuàng)建

二是通過array()函數(shù)創(chuàng)建,同時可以指定索引名

# 方式一:dim()
> x <- 1:8
> dim(x) <- c(2,2,2)
> x
, , 1

     [,1] [,2]
[1,]    1    3
[2,]    2    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

# 方式二:array()
> dim1 <- c("A1","A2")
> dim2 <- c("B1","B2")
> dim3 <- c("C1","C2")
> z <- array(1:8,c(2,2,2),dimnames = list(dim1,dim2,dim3))
> z
, , C1

   B1 B2
A1  1  3
A2  2  4

, , C2

   B1 B2
A1  5  7
A2  6  8

1.5 列表

列表顧名思義就是用來存儲很多內(nèi)容的一個集合,在其他編程語言中,列表一般和數(shù)組是等同的,但是在R語言中,列表卻是R中最復(fù)雜的一種數(shù)據(jù)結(jié)構(gòu),也是非常重要的一種數(shù)據(jù)結(jié)構(gòu)。

列表就是一些對象的有序集合。列表中可以存儲若干向量、矩陣、數(shù)據(jù)框,甚至其他列表的組合。

列表的創(chuàng)建

創(chuàng)建一個列表使用函數(shù)list(),將列表元素添加其中,并且可以為列表元素命名

> a <- 1:10
> b <- "hello world"
> c <- matrix(1:12,nrow = 3,ncol = 4)
> mlist <- list(a,b,c)
> mlist
[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

[[2]]
[1] "hello world"

[[3]]
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

> mlist <- list(first=a,second=b,third=c)
> mlist
$first
 [1]  1  2  3  4  5  6  7  8  9 10

$second
[1] "hello world"

$third
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

列表的索引

# 通過數(shù)值進(jìn)行索引
> mlist[1]
$first
 [1]  1  2  3  4  5  6  7  8  9 10

# 可以一次索引多個向量
> mlist[c(1,2)]
$first
 [1]  1  2  3  4  5  6  7  8  9 10
$second
[1] "hello world"

# 可以通過名稱進(jìn)行索引
> mlist["first"]
$first
 [1]  1  2  3  4  5  6  7  8  9 10

# 使用兩個中括號進(jìn)行索引時,代表是被索引元素的數(shù)據(jù)類型,而不是列表類型
> mlist[[1]]
 [1]  1  2  3  4  5  6  7  8  9 10

1.6 數(shù)據(jù)框

數(shù)據(jù)框是R語言中應(yīng)用最廣泛的數(shù)據(jù)結(jié)構(gòu)

利用數(shù)據(jù)框,可以容納不同類型的數(shù)據(jù),而不必使用同一類型的數(shù)據(jù)

數(shù)據(jù)框的每一列的數(shù)據(jù)類型必須相同,但不同的列可以存儲不同的類型的數(shù)據(jù)

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

> a <- c("北京","上海","廣州")
> b <- c("100平","125平","126平")
> c <- c("100萬","150萬","200萬")
# 使用data.frame將已經(jīng)建立好的向量作為參數(shù)傳入其中
> d <- data.frame(a,b,c)
> d
     a     b     c
1 北京 100平 100萬
2 上海 125平 150萬
3 廣州 126平 200萬

數(shù)據(jù)框的訪問

> d[1]
     a
1 北京
2 上海
3 廣州
> d[c(1,3)]
     a     c
1 北京 100萬
2 上海 150萬
3 廣州 200萬

1.6 因子

因子是R語言中非常重要的的對象,或者說向量對象

因子主要用于管理離散的分類變量,比如成績評定等級(A、B、C),顏色的分類(紅、黃、藍(lán))

因子對象就是管理這些類別變量的重要工具

因子的創(chuàng)建

> grade <- c("A","B","B","A","C")
> gradef <- factor(grade)
# levels是因子的一個重要屬性,揭示了因子中的類別
> gradef
[1] A B B A C
Levels: A B C
?著作權(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ù)。

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