第二天厚满,繼續(xù)學(xué)習(xí)R語(yǔ)言府瞄。
2.創(chuàng)建數(shù)據(jù)集
2.1數(shù)據(jù)集
數(shù)據(jù)構(gòu)成的一個(gè)矩形數(shù)組,行表示觀測(cè)碘箍,列表示變量遵馆。
2.2數(shù)據(jù)結(jié)構(gòu)
標(biāo)量:只含有一個(gè)元素的向量。
2.2.1向量
a<-c("k","j","h","a","c")
a[3] #訪問(wèn)向量中的第三個(gè)元素
a[c(1,3,5)]
a[2:5]
冒號(hào)的用法a<-c(2:6)等價(jià)于 a<-c(2,3,4,5,6)
2.2.2矩陣
矩陣:一個(gè)二維數(shù)組丰榴,可通過(guò)matrix()創(chuàng)建矩陣
mymatrix<-matrix(vetor,nrow = number_of_row,ncol = number_of_colums,
byrow = logical_value,dimnames = list(rownames,colnames))
將一個(gè)向量(第一個(gè)參數(shù)vector)轉(zhuǎn)換為矩陣货邓,
nrow指定行數(shù),
ncol指定列數(shù)四濒,
byrow TRUE或FALSE確定是按行排列還是按列排列(默認(rèn)按列)换况,dimnames指定行名和列名职辨,行名和列名分別用向量表示。
y<-matrix(1:20,nrow = 5,ncol = 4) #創(chuàng)建一個(gè)5*4的矩陣
y
cells<-c(1,25,24,13)
rnames<-c("R1","R2")
cnames<-c("C1","C2")
mymatrix<-matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(rnames,cnames))
mymatrix
矩陣中元素的引用
x[2,]第二行
x[,2]第二列
x[1,4]第一行第四列元素
x[1,c(4,5)]第一行戈二,第四第五個(gè)元素
維度超過(guò)2時(shí)舒裤,使用數(shù)組。有多重模式的數(shù)據(jù)時(shí)觉吭,使用數(shù)據(jù)框~
2.2.3數(shù)組
用array函數(shù)創(chuàng)建:
myarray<-array(vector,dimensions,dimnames)
其中第二個(gè)參數(shù)dimensions是緯度腾供,是一個(gè)數(shù)值型向量;
第三個(gè)參數(shù)dimnames是各維的名字鲜滩,是個(gè)列表.
dim1<-c("A1","A2")
dim2<-c("B1","B2","B3")
dim3<-c("C1","C2","C3","C4")
Z<-array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
Z
數(shù)組是矩陣的推廣伴鳖,其中的元素只能是一種模式。
上面的例子中Z[1,2,3]為15.
2.2.4數(shù)據(jù)框
數(shù)據(jù)框是R中最常處理的數(shù)據(jù)結(jié)構(gòu)
mydataframe<-data.frame(col1,col2,col3);
每一列的名稱(chēng)可由names函數(shù)指定用以下兩個(gè)方法進(jìn)行徙硅;
比如:
names(study) <- c("wei","hei","gen")#修改列名
row.names(study)<-c("Mary","Alice","Bob","Judy")#修改行名
patientID<-c(1,2,3,4)
age<-c(25,34,28,52)
diabetes<-c("Type1","Type2","Type1","Type1")
status<-c("Poor","Improved","Excellent","Poor")
patientdata<-data.frame(patientID,age,diabetes,status)
patientdata
class(patientdata) #產(chǎn)看patientdata的類(lèi)型
patientdata[1:2] #選了數(shù)據(jù)框第一列和第二列黎侈;
patientdata[1,2] #選的是第一行第二列的元素;
patientdata[1:2,] #選的是第一行第二行(注意沒(méi)有逗號(hào)的時(shí)候默認(rèn)是選擇的列)
patientdata[c("diabetes","status")] #使用列名來(lái)選取元素
patientdata$age #選取數(shù)據(jù)框patientdata中age這一列
table()函數(shù)生成兩個(gè)變量的列聯(lián)表(即符合條件的個(gè)體數(shù))
table(patientdata$diabetes,patientdata$status)
以上就是得到符合兩個(gè)條件交叉的geti數(shù)量
attach()函數(shù)
attach()可將數(shù)據(jù)框添加到R的搜索路徑中闷游。R在遇到一個(gè)變量名后峻汉,將檢查搜索
路徑中的數(shù)據(jù)框,以定位到這個(gè)變量脐往。
舉個(gè)栗子:
summary(mtcars$mpg)#生成四分位數(shù)及均值
plot(mtcars$mpg,mtcars$disp)
plot(mtcars$mpg,mtcars$wt)#等價(jià)于下列代碼:
attach(mtcars)
summary(mpg)
plot(mpg,disp)
detach(mtcars) #注意用完后別忘再把變量從搜索路徑中請(qǐng)出來(lái)
注意如果數(shù)據(jù)框中的變量與數(shù)據(jù)框外的變量同名休吠,則attach(dataframe)會(huì)把數(shù)據(jù)
框外的變量留下來(lái)放在數(shù)據(jù)框中,即原有對(duì)象優(yōu)先(而不是覆蓋)R挡尽A鼋浮!
上面的例子還可以用with()函數(shù)進(jìn)行改寫(xiě):
with(mtcars,{
summary(mpg,disp,wt)
plot(mpg,disp)
plot(mpg,wt)
})
以上模式是with(dataset,{statements})
注大括號(hào)內(nèi)賦值的變量梅尤,僅在大括號(hào)內(nèi)有效柜思。若要讓大括號(hào)內(nèi)賦值的變量在大括號(hào)外有效的話(huà),需要使用<<-這個(gè)符號(hào)賦值巷燥。
指定實(shí)例標(biāo)識(shí)符
在創(chuàng)建數(shù)據(jù)框時(shí)指定:
patientdata<-data.frame(patientID,age,diabetes,status,row.names = patientID)
這里一定是row.names!!!
2.2.5因子
其實(shí)就是定類(lèi)和定序類(lèi)型的變量(也就是分類(lèi)變量)
函數(shù)factor()以一個(gè)整數(shù)向量的形式存儲(chǔ)類(lèi)別值赡盘,取值范圍是【1-k】,k是變量中唯一值的個(gè)數(shù)。
舉個(gè)例子
diabetes<-c("Type1","Type2","Type1","Type1")
diabetes<-factor(diabetes)
將此向量存儲(chǔ)為(1,2,1,1),并在內(nèi)部關(guān)聯(lián)1=Type1,2=Type2(復(fù)制的順序是根據(jù)字母順序定的)
有序的變量的話(huà)缰揪,需要加order=TRUE.
若是想要按照自己的順序排列陨享,需要使用levels選項(xiàng):
status<-factor(status,ordered = TRUE,levels=c("Poor","Improved","Excellent"))
2.2.6列表
列表是一些對(duì)象的有序集合,可以整合若干向量钝腺、矩陣抛姑、數(shù)據(jù)框,甚至其他列表的組合艳狐。
mylist<-list(object1,object2)
2.3數(shù)據(jù)的輸入
2.3.1鍵盤(pán)輸入數(shù)據(jù)
創(chuàng)建空的數(shù)據(jù)框
mydata<-data.frame(age=numeric(0),gender=character(0),weight=numeric(0))
編輯數(shù)據(jù)
mydata<-edit(mydata)
fix(mydata) #以上兩句等效
2.3.2從帶分隔符的文本文件導(dǎo)入數(shù)據(jù)
mydataframe<-read.table("file",header = logical_value,sep = "delimiter",row.names = "name")
header 表示文件是否在第一行包含了變量名的邏輯型變量
row.names用于指定行名定硝,默認(rèn)情況下,字符型變量將被轉(zhuǎn)換為因子毫目。
設(shè)置選項(xiàng)stringAsFactor=FALSE即可停止轉(zhuǎn)換J叻取;逦辍!
函數(shù)file(),gzfile(),unz(),url()可作為文件名參數(shù)使用~