(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
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...