Why R
? ?R是統計軟件的一種,內部包含許多統計技術的環境。要對數據進行統計分析數據挖掘,一個好的工具必不可少,相對于其他的統計軟件R具有很多優勢,而我之所以要學習R語言,基于以下幾個原因:
1)R開源,免費。
?這意味著學習成本較低,學的人就多,遇到問題有很多人幫助(:(oracle biee的痛苦經歷告訴我,開源的就是好?。?/p>
2)R可以與hadoop結合
大數據時代,軟件能處理多少數據量,能支撐哪些平臺是很關鍵的。
3)R有UNIX,LINUX,MACOS,WINDOWS各個版本
很多服務器都是LINUX的,因此有LINUX版本才能在生產環境中用上。
其余諸如統計方法多,軟件包多,圖形豐富,矩陣向量運算強等優點就不多說,很多統計軟件都具備這些。
OK,不多說,直接來看看
數據矩陣表示
1.創建向量(即一維數組,隨機變量)
?R用c()函數來創建一個向量
>x1=c(71,75,59)
這里x1為一個向量,也可以認為是1行3列的矩陣。
函數length()返回向量的長度,mode()返回向量的數據類型
> length(x1)
[1] 3
> mode(x1)
[1] "numeric"
2.創建矩陣(二維數組)
1)合并向量成矩陣
rbind()按行合并,cbind()按列合并
> x2=c(3,2,1,6)
> rbind(x1,x2)
?[,1] [,2] [,3] [,4]
x1 71 75 59 71
x2 3 2 1 6
警告信息:
In rbind(x1, x2) :number of columns of result is not a multiple of vector length (arg 1)
這里由于x1是1行3列,而x2是1行4列,所以按行合并時,會按照較長的向量x2來,x1的第四位會自動循環補上。
> cbind(x1,x2)
x1 x2
[1,] 71 3
[2,] 75 2
[3,] 59 1
[4,] 71 6
2)生成矩陣
matrix(data=NA,nrow=1,ncol=1,byrow=FLASE,dimnames=NULL)
data為矩陣元素,nrow為行數,ncol為列數,byrow為元素是否按照行來排列,dimnames為行列的名稱
> matrix(x1,nrow=3,ncol=4)
? ? [,1] [,2] [,3] [,4]
[1,] 71 71 71 71
[2,] 75 75 75 75
[3,] 59 59 59 59
3.矩陣轉置、加減乘、對角、求逆
轉置函數為t() 或transpose()
+,-
乘為%*%
對一個向量用diag()函數將對產生以這個向量為對角元素的矩陣
solve(A,b)運算結果可解線性方程組Ax=b,若b缺省,則直接solve(A)求解A的逆矩陣
4.特征值與特征向量、Choleskey分解、奇異值分解、QR分解、Kronecker積、維數
矩陣A的譜分解為A=UVU',V是由A的特征值組成的對角矩陣,U的列為A的特征值對應的特征向量,可以用函數eigen()得到U和V
eigen(x,symmetric,only.values=FALSE,EISPACK=FALSE)
其中x為矩陣,symmetric項指定矩陣x是否為對稱矩陣,若不指定,系統將自動檢測x是否對稱
對于正定矩陣A,可對其進行Choleskey分解,即A=PP',其中P為上三角矩陣可以用函數chol()來分解。
A為m*n矩陣,rank(A)=r,可以分解為A=UDV',其中U'U=V'V=I,可以用svd()來對矩陣進行奇異值分解。
A為m*n矩陣,可以進行QR分解,A=QR,其中Q'Q=I,可用qr()分解。
n*m矩陣A與h*k矩陣B的kronecker積為一個nh*mk維矩陣,kronecker()來實現。
dim()返回矩陣維數,nrow()返回行數,ncol()返回列數。
5.矩陣行和、列和、行平均、列平均
rowSums()
rowMeans()
colSums()
colMeans()
apply(X,MARGIN,FUN,……)
X為矩陣,MARGIN用來指定是對行運算還是對列運算,MAGRIN=1表示對行,2表示對列,FUN用來指定運算函數,……用來給FUN中需要的其他參數
apply(A,1,sum)
apply功能強大,可以靈活使用。
數據框表示
數據框是一種矩陣形式的數據,但數據框中各列可以不同類型的數據,每列是一個變量,每行是一個觀測值,數據框是R語言特有的數據類型,很有用。
data.frame()生成數據框
例如X=data.frame(x1,x2)
X1,X2若為向量時,必須列數相同。