資料結構與基本運算

2021-07-07 07:47:28 字數 4450 閱讀 9726

複習篇-

1.資料型別

numeric:包含integers(整數型)和double-precision(雙精度型).預設是雙精度型資料

character:這種資料形式是夾在雙引號或單引號之間的字串.

logical:取true or false

complex:形如a+bi型的複數

raw(原始型):二進位制形式儲存資料

missing value(預設值):當乙個元素或值在統計的時候是」不可得到的」 (na)或「缺失值」(missing value)時,相關位置可能會保留並且賦予乙個特定的na;任何na的運算結果都是na,is.na()函式用來檢測資料是否缺失,返回結果是邏輯值。

常見的辨別和轉換資料物件型別的函式有:

資料型別

辨別函式

轉換函式

character

is.character()

as.character()

numeric

is.numeric()

as.numeric()

nais.na()

as.na()

double

is.double()

as.double()

integer

is.integer()

as.integer()

complex

is.complex()

as.complex()

logical

is.logical()

as.logical()

2.資料物件

r中的資料物件主要有6種結構:向量(vector)、矩陣(matrix)、陣列(array)、因子(factor)、列表(list)和資料框(data.frame)

其中r在進行運算時或有些缺陷,微小的數字或巨大的數字在運算時經常會出現一些意外,浮點數在計算機中的表達有限,不能以任意精度儲存.例如:

0.4-0.7+0.3==0

[1] false

> 0.0000003-0.0000007+0.0000004==0

[1] true

因此,在處理r裡面的資料時,尤其在判斷時,需要特別注意精度問題.

2.1向量 函式

用途length()

長度mode()

返回向量的資料型別

min()

返回向量的最小值

max()

返回向量的最大值

range()

返回向量的範圍

which.min()、which.max()

分別返回在第幾個分量求到最小、最大值

sort()

對向量排序

rev()

將向量按原方向的反方向排列

rank()

給出向量的秩,即資料排序的相對位置(非引數秩)

為向量新增元素

prod()

可以求向量連乘積

match()

匹配函式

all()

判斷所有

any()

判斷部分

關於向量的統計函式有:mean()、median()、var()、sd()

- 向量索引

向量下標可以用子向量取出多個元素、或只取出單個元素;下標換成邏輯運算可以取出對應元素。

> x <- c(1:7)

> x[2]

[1] 2

> x[c(2,6)]

[1] 2 6

> x[x<4]

[1] 1 2 3

> z <- c(4:9,na)

> z [is.na(z)]

[1] na

> z [is.na(z)] <- 10 #將10賦給z裡面的缺失值

如果下標取值是負整數,則表示刪除相應位置的元素。

2.2矩陣

x <- matrix(c(1:6),ncol=2,dimnames =

list(c(「one」,」two」,」three」),c(「first」,」second」)),byrow = t);x

colnames(x) #訪問矩陣a的行名

colnames(x) <- c(「green」,」red」) #修改行名

> a

[,1]

[,2]

[,3]

[1,] 1 2 3

[2,] 4 5 6

[3,] 7 8 10

> sm <- crossprod(a,a) #表示t(a)%*%a,兩個矩陣相乘

> ev <- eigen(sm);ev

$values

[1] 303.19533618 0.76590739 0.03875643

$vectors

[,1]

[,2]

[,3]

[1,] -0.4646675 0.833286355 0.2995295

[2,] -0.5537546 -0.009499485 -0.8326258

[3,] -0.6909703 -0.552759994 0.4658502

2.3陣列

陣列既可以看作是帶有多個下標的且型別相同的元素的集合,也可以看作是向量和矩陣的推廣

array(data=na,dim=length(data),dimnames=null)

其中,data表示資料,dim是維數,dimnames可以更改陣列的維度名稱.

dim()函式可以返回陣列的維數,還可以用來將向量轉換成陣列或矩陣

2.4因子

因子可以看出一種變數的別名

factor(x=character(),levels,labels=levels,exclude=na,ordered)

2.5列表

資料物件可以包含不同的資料型別,比如乙個列表可以包括數值向量、邏輯向量、矩陣、字元、陣列和列表等,列表中包含的物件又稱為它的分量

list(var1=var1,var2=var2,…)

要訪問列表的某一部分,可以用list_name[[1]]的形式訪問,若要訪問第二個分量前三個元素,則可以用list_name[[2]][1:3]的形式。

由於列表的分量可以被命名,因此可用list_name$var_name形式訪問

函式length()、mode()、names()可以分別返回列表的長度(分量的數目)、資料型別和列表裡成分的名字;list_name[[1]]選擇單個元素,即列表的第乙個物件,結果中不顯示列表分量的名稱,而list_name[1]選擇第乙個子列表

lst <- list(name=c(「alice」,」john」,」bobo」,」jerry」),

+ ***=c(「f」,」f」,」m」,」m」),

+ age=c(13,12,13,12),

+ height=c(56.5,65.3,57.3,62.5),

+ weight=c(84.0,89.0,99.5,83.0));lst

$name

[1] 「alice」 「john」 「bobo」 「jerry」

$***

[1] 「f」 「f」 「m」 「m」

$age

[1] 13 12 13 12

$height

[1] 56.5 65.3 57.3 62.5

$weight

[1] 84.0 89.0 99.5 83.0

lst[1]

$name

[1] 「alice」 「john」 「bobo」 「jerry」

lst[[1]]

[1] 「alice」 「john」 「bobo」 「jerry」

lst$name

[1] 「alice」 「john」 「bobo」 「jerry」「`

2.6資料框

資料框是一種矩陣形式的資料,但資料框中各列可以是不同型別的資料,每列是乙個變數,每行是乙個觀測。資料框既可以看作是矩陣的推廣,也可以看作是一種特殊的列表物件。

對於可能列入資料框中的列表有如下限值:

data.frame(…,row.names=null,check.rows=false,…)

row.names()也可以對資料框的行名進行修改

資料框的引用

(1)以陣列形式訪問

因為資料框的列表示變數,行表示觀測數,所以可以把資料框看作為陣列,可以按行、列訪問

(2)以列表的形式訪問資料框

data_frame_name$var_name

data_frame_name[[var_name]]

attach()函式

attach()函式可以把資料框中的變數」連線」到記憶體中,從而可以直接使用資料框中的變數名訪問;取消連線用detach()函式

資料結構與演算法基本

棧的演算法 計算機內部空間是連續儲存的,但是可以通過邏輯上改變記憶體的物理結構,資料在記憶體上呈現出的是連續分布狀態 主要的典型資料結構 在實現棧這種資料結構時,首先要定義乙個陣列和乙個變數。陣列中所包含的元素個數就是棧的大小 棧中最多能存放多少個資料 變數中則儲存著乙個索引,指向儲存在棧中最頂端的...

資料結構與演算法分析記錄 基本資料結構

單鏈表 struct node 找到某一元素 position find elementtype x,list list 刪除某一元素 void delete elementtype x,list l 找到目標元素前的元素 position findprevious elementtype x,li...

資料結構與演算法(基本認知)

是對特定問題求解步驟的一種描述,是指令的有限序列 評價演算法的優劣 時間複雜度和空間複雜度其實就是所耗時間與空間關於輸入資料規模的函式 1 時間複雜度 算出結果的時間花費多少 2 空間複雜度 算出結果需要的記憶體位元組的多少 3 可讀性和可維護性 是相互之間存在的一種或者多種特定關係的資料元素的集合...