R語言資料結構

2022-03-19 17:22:48 字數 4833 閱讀 1154

(1)向量

乙個向量的所有元素必須有相同的型別(模式)

(2)列表

列表可以非同質的

列表可按位置索引:lst[[2]]

抽取子列表:lst[c(2,5)]

列表可以有名稱:lst[[「moe」]]或者lst$moe

列表類似於字典、雜湊表等

(3)模式:實體型別

> mode(3.1415)

r中每個物件都有乙個模式,表明該物件如何儲存在儲存器中:

物件例子

模式number

3.14

numeric

vector of numbers

c(2.7, 3.14)

numeric

character string

「moe」

character

vector of character string

c(「moe」, 「larry」)

character

factor

factor(c(「ny」,」ca」,」il」))

numeric

list

list(「moe」,」larry」)

list

data frame

data.frame(x=1:3, y=c(「ny」,」ca」,」il」))

list

function

print

function

(4)類:抽象型別

> d <—as.date(「2010-03-10」)

> class(d)             //結果是「date」

r中每個物件有乙個定義它們抽象型別的類(class)

(5)純量(常量)

又叫做擁有唯一元素的向量

(6)矩陣

r中矩陣只是有維數的向量

向量的維數,初始值為null

> a <—1:6

> dim(a)<— c(2,3)           //成為2*3的矩陣

(7)陣列(array)

矩陣只是二維的向量,陣列可以是多維的向量

(8)因子(factor)

r記錄向量中的唯一值,每乙個唯一值稱為相關聯因子的水平,參照5.5

因子兩個關鍵應用:分類變數、分組

(9)資料框

旨在模擬資料集,與sas或spss中資料集

> v <—c(1,2,3)

> v <—c(v, 4)             //把4加入原向量為:1,2,3,4

> w <—c(5,6,7,8)

> v <—c(v,w)             //將v和w合併

當較短的向量處理完所有元素,而較長的向量仍有未處理元素,較短向量返回到開始位置迴圈各元素

因子由各分類變數組成,每個分類變數的可能值稱為乙個水平

> f <—factor(v)

> lst <—list(0.5,0.8,0.3)

> lst <—list(mid=0.5, right=0.8, left=0.3)

> lst[[2]]

>lst[[「mid」]]       或lst[「mid」]              或lst$mid

> lst[[「mid」]]<— null           //移除mid元素

> v <—unlist(lst)

> lst[lst< 0] <— null                     //移除小於0的元素

>lst[is.na(lst)] <— null          //移除值為na的元素

> lst[abs(unlist(lst))< 1]

> mat <—matrix(vec, 2, 3)            //從vec資料生成乙個2*3的矩陣

> dim(vec)<— c(2,3)                      //方法2

> t(a)                   //矩陣a的轉置

> solve(a)            //矩陣a的求逆

> a %*% b           //矩陣a*b

> diag(n)              //生成乙個n階對角單位矩陣

> rownames(mat)<— c(「rowname_1」, 「rowname_2」, …, 「rowname_n」)

> colnames(mat)<— c(「colname_1」, 「colname_2」, …, 「colname_n」)

> vec <—mat[1,]                     //結果是乙個向量

> vec <—mat[,2 ,drop=false]                     //結果是乙個矩陣

> dfrm <—data.frame(v1, v2, v3, f1, f2)            //用向量和因子初始化資料框

> lst <—list(v1, v2, v3)

> dfrm <—as.data.frame(lst)                             //方法2

當每行的資料是由數字、字元等不同模式資料混合時,不能用向量儲存資料。一般將每一行儲存在乙個單行資料框中,然後組成乙個列表,呼叫函式rbind和do.call把多行結合成乙個大資料框。

> obs <—list(data.frame(vc1=1, f1=0), data.frame(vc1=2, f1=1))

> dfrm <—rbind(obs[[1]], obs[[2]])                    //將前兩行組成乙個資料框

> dfrm <—do.call(rbind, obs)                      //將所有行組成乙個資料框

當obs不是資料框的列表,而是列表的列表,先呼叫map函式將行資料轉換成資料框資料,然後再用do.call

> dfrm <—do.call(rbind, map(as.data.frame, obs))

新行得是單行資料框模式的。

> suburbs<— rbind(suburbs,

+                   data.frame(city=」nanjing」,county=」kane」, pop=5421)

+                   data.frame(city=」beijing」,county=」jane」, pop=5552))    //同時加兩行

當資料量很大時候,逐個新增新行構建資料框時,r的記憶體管理器會不良運轉。如果知道必須的行數,可以預先分配空間。

> n <—100000

> dfrm <—data.frame(colname1=numeric(n), colname2=character(n), …)

> dfrm[[n]]                        //返回第n列,乙個向量

> dfrm[n]                           //返回乙個資料框,裡面只有第n列

>dfrm[c(n1,n2,n4)]          //

> dfrm[,n]                          //返回乙個向量

>dfrm[,c(n1,n3)]              //

> dfrm[[「name」]]             > dfrm$name             //返回列名為name的列

> subset(dfrm,select=c(colname1, colname2))  //按列名選取列

>subset(dfrm, select=c(colname1, colname2), subset=(colname1>0))              //滿足條件的行,以及只要兩列

> colnames(dfrm)<— c(「before」, 「treatment」, 「after」)

> temp <—edit(dfrm)

> dfrm <—temp                      //將修改後的資料框存為temp

> fix(dfrm)                                //直接修改後覆蓋原資料框

> clean_dfrm<— na.omit(dfrm)

> subset(dfrm,select = -colname2)

當兩個資料框的列不一致時,合併是橫向的,用cbind:

> all.cols <—cbind(dfrm1, dfrm2)        //橫向列合併

當兩個資料框的列一致時,合併是縱向的,用rbind:

> all.rows <—rbind(dfrm1, dfrm2)              //縱向行合併

根據共有列合併資料框,類似sql的join,用merge:

> m <—merge(dfrm1, dfrm2, by=」name」)

當用資料框中的列時,本來需要dfrm$colname1,可以用如下命令省去dfrm:

> with(dfrm,expr)            //當前表示式expr中可以直接用colname1

>attach(dfrm)                  //下面的表示式中都可以用colname1

>as.character(x)        //字元型

>as.complex(x)          //複數型

>as.numeric(x)          or           as.double(x)

>as.integer(x)

>as.logical(x)

有些轉換是不可行的,要注意。

>as.data.frame(x)

> as.list(x)

>as.matrix(x)

> as.vector(x)

R語言 資料結構

向量 my vector c 1,2,8,9,16 my vector 2 4 矩陣 矩陣行列命名,預設先排列 cells c 1,36,24,12 row names c r1 r2 col names c c1 c2 my matrix1 matrix cells,nrow 2,ncol 2,d...

R語言資料結構

字元 character 數值 numeric real numbers 整數 integer 複數 complex 邏輯 logical tf必須大寫 x true 常用方法 名稱維度 型別長度 建立 vector x vector character length 10 this is anno...

R語言 資料結構

向量vector本質作為一維陣列可以包含數字,字元,布林值 a c 1,2,5,3,6,2,4 b c one two three c c true,true,true,false,true,false 矩陣matrix 二維陣列 構造需要通過matrix方法實現 x matrix 1 20,nro...