(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 R語言學習筆記(一)
help.start help functionname 檢視函式幫助文件 args functionname 獲取函式的引數 example functionname 檢視函式的使用示例 help package packagename 檢視某乙個軟體包 vignette 檢視安裝的所有軟體包 p...
R R語言學習筆記(四)
用因子 分組因子 來標識元素的不同組 groups split x,f x c 40,29,39 f factor c a b a 返回的是乙個向量列表,列表中每個向量包含屬於同一組的元素 groups unstack data.frame x,f 返回的是由向量列表轉換成的資料框 返回結果是乙個向...
C語言學習筆記(三)
1.控制語句 if else 條件語句 for 迴圈語句 while 迴圈語句 do while 迴圈語句 continue 結束本次迴圈語句 break 中止執行switch或迴圈語句 switch 多分支選擇語句 return 從函式返回語句 goto 最好不使用 2.函式呼叫語句 3.表示式語...