快捷鍵:
1. Ctrl + Shift + F10 to restart your R session
2. Ctrl +O:打開文件
3. Ctrl + Shift+C :加標記#
4. Ctrl + Shift+N :創建新文本簿
1.r語言中= ,<-功能是相同,有時候=會出錯,所以用<-。但是從字面上解釋,通常“<-”被認為是賦值,”=”是傳值。
2.在函數調用中,func(x=1)與func(x<-1)是有區別的,前者調用完后變量x不會被保留,而后者會在工作區里保留變量x=1。
3.初始化:
初始化
3.1使用data.frame函數就可以初始化一個Data Frame。比如我們要初始化一個student的Data Frame其中包含ID和Name還有Gender以及Birthdate,那么代碼為:
student<-data.frame(ID=c(11,12,13),Name=c(“Devin”,”Edward”,”Wenli”),Gender=c(“M”,”M”,”F”),Birthdate=c(“1984-12-29”,”1983-5-6”,”1986-8-8”))
3.2另外也可以使用read.table() read.csv()讀取一個文本文件,返回的也是一個Data Frame對象。讀取數據庫也是返回Data Frame對象。
查看student的內容為:
4.數據標准化:
scale(data, center=T,scale=T) #數據標准化
1)center和scale默認為真,即T或者TRUE
2)center為真表示數據中心化
3)scale為真表示數據標准化
讀取數據:
library(xlsx)
ray = read.xlsx('F:/R編輯器/student.xlsx',1,encoding="UTF-8")
文件中含有中文,必須加上:encoding="UTF-8"。不然會出現亂碼。
聚類分析:對樣品或指標進行分類的一種分析方法,依據樣本和指標已知特性進行分類。本節主要介紹層次聚類分析,一共包括3個部分,每個部分包括一個具體實戰例子
r語言使用dist(x, method = "euclidean",diag = FALSE, upper = FALSE, p = 2) 來計算距離。其中x是樣本矩陣或者數據框。method表示計算哪種距離。method的取值有:
euclidean 歐幾里德距離,就是平方再開方。
maximum 切比雪夫距離
manhattan 絕對值距離
canberra Lance 距離
minkowski 明科夫斯基距離,使用時要指定p值
binary 定性變量距離.
定性變量距離: 記m個項目里面的 0:0配對數為m0 ,1:1配對數為m1,不能配對數為m2,距離=m1/(m1+m2);
diag 為TRUE的時候給出對角線上的距離。upper為TURE的時候給出上三角矩陣上的值。
r語言中使用scale(x, center = TRUE, scale = TRUE) 對數據矩陣做中心化和標准化變換。
如只中心化 scale(x,scale=F) ,
r語言中使用sweep(x, MARGIN, STATS, FUN="-", ...) 對矩陣進行運算。MARGIN為1,表示行的方向上進行運算,為2表示列的方向上運算。STATS是運算的參數。FUN為運算函數,默認是減法。下面利用sweep對矩陣x進行極差標准化變換
1 2 3 |
>center <- sweep(x, 2, apply(x, 2, mean)) #在列的方向上減去均值。 >R <- apply(x, 2, max) - apply(x,2,min) #算出極差,即列上的最大值-最小值 >x_star <- sweep(center, 2, R, "/")#把減去均值后的矩陣在列的方向上除以極差向量 |
1 2 3 |
>center <- sweep(x, 2, apply(x, 2, min)) #極差正規化變換 >R <- apply(x, 2, max) - apply(x,2,min) >x_star <- sweep(center, 2, R, "/") |
2)層次聚類法
層次聚類法。先計算樣本之間的距離。每次將距離最近的點合並到同一個類。然后,再計算類與類之間的距離,將距離最近的類合並為一個大類。不停的合並,直到合成了一個類。其中類與類的距離的計算方法有:最短距離法,最長距離法,中間距離法,類平均法等。比如最短距離法,將類與類的距離定義為類與類之間樣本的最段距離。。。
r語言中使用hclust(d, method = "complete", members=NULL) 來進行層次聚類。
其中d為距離矩陣。
method表示類的合並方法,有:
single 最短距離法
complete 最長距離法
median 中間距離法
mcquitty 相似法
average 類平均法
centroid 重心法
ward 離差平方和法
?
1 2 3 4 5 6 7 8 |
> x <- c(1,2,6,8,11) #試用一下 > dim(x) <- c(5,1) > d <- dist(x) > hc1 <- hclust(d,"single") > plot(hc1) > plot(hc1,hang=-1,type="tirangle") #hang小於0時,樹將從底部畫起。 #type = c("rectangle", "triangle"),默認樹形圖是方形的。另一個是三角形。 #horiz TRUE 表示豎着放,FALSE表示橫着放。 7 |
1、常規聚類過程:
一、首先用dist()函數計算變量間距離
dist.r = dist(data, method=" ")
其中method包括6種方法,表示不同的距離測度:"euclidean", "maximum", manhattan", "canberra", "binary" or "minkowski"。相應的意義自行查找。
二、再用hclust()進行聚類
hc.r = hclust(dist.r, method = “ ”)
其中method包括7種方法,表示聚類的方法:"ward", "single", "complete","average", "mcquitty", "median" or "centroid"。相應的意義自行查找。
三、畫圖
plot(hc.r, hang = -1,labels=NULL) 或者plot(hc.r, hang = 0.1,labels=F)
hang 等於數值,表示標簽與末端樹杈之間的距離,
若是負數,則表示末端樹杈長度是0,即標簽對齊。
labels 表示標簽,默認是NULL,表示變量原有名稱。labels=F :表示不顯示標簽。
實例介紹
特殊情況用法:
當用已知距離矩陣進行聚類時,即變量間的距離已經計算完,只是想用
已知的距離矩陣進行聚類。這時,需將距離矩陣轉成dist類型。
然后再執行hclust()聚類和plot()畫圖。
# mydata作為距離矩陣,且為正方矩陣
mydata<-matrix(1:25,ncol=5);
class(mydata);
# 把mydata變成dist類型
mydist<-as.dist(mydata);
class(mydist);
[1] "dist"
myhc<-hclust(mydist,method="complete");
myhc;
Call:
hclust(d = mydist, method ="complete")
Cluster method : complete
Number of objects: 5
plot(myhc,hang=0.1)
2、熱圖聚類過程:
一、首先用dist()函數計算變量間距離
dist.r = dist(data, method=" ")
二、用heatmap()函數進行熱點圖聚類
對於heatmap中具體參數,這里不做過多介紹,可在幫助文檔中找說明。除此heatmap函數之外,gplots包中的heatmap.2()函數,也可以做熱點圖聚類。
其中參數不做過多描述。若有需求,請分享並回復:heatmap.2
即可得到答案。
實戰例子:
require(graphics);
dist.r<-dist(USArrests,method="euclidean") # 方法:歐氏距離
dist.r
#聚類並畫圖
heatmap(as.matrix(dist.r))
3、多維標度和聚類的結果
MDS方法對距離矩陣進行降維,用不同的顏色來表示聚類的結果。
另一種聚類效果展示。
例子:
系統聚類:
library(xlsx)
mydata=read.xlsx('F:/R編輯器/student.xlsx',1,encoding="UTF-8")
head(mydata)
rownames(mydata)=mydata$科目
mydata=mydata[,-1]
head(mydata)
result=dist(mydata, method = "euclidean")
m=c("complete")
h=list();par(mfrow=c(2,4))
for(i in 1:length(m)){
h[[i]]=hclust(dist(scale(mydata)),method =m[i])
plot(h[[i]],lables=rownames(mydata),cex=2,
main=paste("Method: ",m[i]))
}
5、對普通的畫圖為:
plot(number, count, yaxt="n", xaxt="n",xlab="x 軸名字",type="b")
上述表示為:yaxt xaxt都是將數據軸的標度和標度值完全去掉,但是可以設置軸的名字,后面設置標度和標度值使用:
axis(side=1, at=c(1,3,5,6,7), lables=(ni, hao, a , man, go));等均可匹配,at表示刻度值范圍。
但是有個問題就是太擁擠的不可見怎么縮小y軸的尺寸,而縮小尺寸值是在axis()命令設置at這個參數的時候就設置,使用cex.axis=0.5就表示縮小一半。而當直接使用默認的坐標刻度的時候,那么就在plot中直接放cex.axis=0.5即可。同樣兩個地方可以用的有:cex.lab=0.5 只縮放坐標軸的名稱。 cex.main=0.只縮放主標題 cex.sub只縮放副標題。
當然上述除了axis要設置at值,還有par函數,但是該函數主要是作用於整個畫布環境,設置完后,不會對當前已經顯示的影響,而只會影響后面重新生成的圖片。可以設置,par(cex.axis=0.5, )
其中設置畫布大小的為:par(pin(11,7))是目前自己試出來的最大畫布。
runif()函數,隨機數的產生,均勻分布隨機數
R語言生成均勻分布隨機數的函數是runif()
句法是:runif(n,min=0,max=1) n表示生成的隨機數數量,min表示均勻分布的下限,max表示均勻分布的上限;若省略參數min、max,則默認生成[0,1]上的均勻分布隨機數。
正態分布隨機數的生成函數是 rnorm()
句法是:rnorm(n,mean=0,sd=1) 其中n表示生成的隨機數數量,mean是正態分布的均值,默認為0,sd是正態分布的標准差,默認時為1;
五、apply()函數
apply函數族是R語言中數據處理的一組核心函數,通過使用apply函數,我們可以實現對數據的循環、分組、過濾、類型控制等操作。
apply函數是最常用的代替for循環的函數。apply函數可以對矩陣、數據框、數組(二維、多維),按行或列進行循環計算, 對子元素進行迭代,並把子元素以參數傳遞的形式給自定義的FUN函數中,並以返回計算結果。
apply(X, MARGIN, FUN, ...)
參數列表:
- X:數組、矩陣、數據框
- MARGIN: 按行計算或按按列計算,1表示按行,2表示按列
- FUN: 自定義的調用函數
- …: 更多參數,可選.例:apply(X,2,sum)