R語(yǔ)言入門(mén)教程二:數(shù)據(jù)導(dǎo)入和描述統(tǒng)計(jì)
1 數(shù)據(jù)導(dǎo)入
對(duì)初學(xué)者來(lái)講,面對(duì)一片空白的命令行窗口,第一道真正的難關(guān)也許就是數(shù)據(jù)的導(dǎo)入。數(shù)據(jù)導(dǎo)入有很多途徑,例如從網(wǎng)頁(yè)抓取、公共數(shù)據(jù)源獲得、文本文件導(dǎo)入。為了快速入門(mén),建議初學(xué)者采取R語(yǔ)言協(xié)同Excel電子表格的方法。也就是先用較為熟悉的Excel讀取和整理你要處理的數(shù)據(jù),然后“粘貼”到R中。
例如我們先從這個(gè)地址下載iris.csv演示數(shù)據(jù),在Excel中打開(kāi),框選所有的樣本然后“復(fù)制”。在R語(yǔ)言中輸入如下命令:
data=read.table(‘clipboard’,T)
這的里read.table是R讀取外部數(shù)據(jù)的常用命令,T表示第一行是表頭信息,整個(gè)數(shù)據(jù)存在名為data的變量中。另一種更方便的導(dǎo)入方法是利用Rstudio的功能,在workspace菜單選擇“import dataset”也是一樣的。
2 Dataframe操作
在數(shù)據(jù)導(dǎo)入R語(yǔ)言后,會(huì)以數(shù)據(jù)框(dataframe)的形式儲(chǔ)存。dataframe是一種R的數(shù)據(jù)格式,可以將它想象成類似統(tǒng)計(jì)表格,每一行都代表一個(gè)樣本點(diǎn),而每一列則代表了樣本的不同屬性或特征。初學(xué)者需要掌握的基本操作方法就是dataframe的編輯、抽取和運(yùn)算。
盡管建議初學(xué)者在Excel中就把數(shù)據(jù)處理好,但有時(shí)候還是需要在R中對(duì)數(shù)據(jù)進(jìn)行編輯,下面的命令可以讓你有機(jī)會(huì)修改數(shù)據(jù)并存入到新的變量newdata中:
newdata=edit(data)
另一種情況就是我們可能只關(guān)注數(shù)據(jù)的一部分,例如從原數(shù)據(jù)中抽取第20到30號(hào)樣本的Sepal.Width變量數(shù)據(jù),因?yàn)镾epal.Width變量是第2個(gè)變量,所以此時(shí)鍵入下面的命令即可:
newdata=data[20:30,2]
如果需要抽取所有數(shù)據(jù)的Sepal.Width變量,那么下面兩個(gè)命令是等價(jià)的:
newdata=data[,2]
newdata=data$Sepal.Width
第三種情況是需要對(duì)數(shù)據(jù)進(jìn)行一些運(yùn)算,例如需要將所有樣本的Sepal.Width變量都放大10倍,我們先將原數(shù)據(jù)進(jìn)行一個(gè)復(fù)制,再用$符號(hào)來(lái)提取運(yùn)算對(duì)象即可:
newdata=data
newdata$Sepal.Width=newdata$Sepal.Width*10
3 描述統(tǒng)計(jì)
描述統(tǒng)計(jì)是一種從大量數(shù)據(jù)中壓縮提取信息的工具,最常用的就是summary命令,運(yùn)行summary(data)得到結(jié)果如下:對(duì)于數(shù)值變量計(jì)算了五個(gè)分位點(diǎn)和均值,對(duì)于分類變量則計(jì)算了頻數(shù)。
也可以單獨(dú)計(jì)算Sepal.Width變量的平均值和標(biāo)準(zhǔn)差
mean(data$Sepal.Width)
sd(data$Sepal.Width)
計(jì)算分類數(shù)據(jù)Species變量的頻數(shù)表和條形圖
table(data$Species)
barplot(table(data$Species))
對(duì)于一元數(shù)值數(shù)據(jù),繪制直方圖和箱線圖觀察其分布是常用的方法:
hist(data$Sepal.Width)
boxplot(data$Sepal.Width)
對(duì)于二元數(shù)值數(shù)據(jù),則可以通過(guò)散點(diǎn)圖來(lái)觀察規(guī)律
plot(data$Sepal.Width,Sepal.Length)
如果需要保存繪圖結(jié)果,建議使用Rstudio中的plot菜單命令,選擇save plot as image
R語(yǔ)言入門(mén)教程三:常用統(tǒng)計(jì)函數(shù)運(yùn)算
在R語(yǔ)言中經(jīng)常會(huì)用到函數(shù),例如上節(jié)中講到的求樣本統(tǒng)計(jì)量就需要均值函數(shù)(mean)和標(biāo)準(zhǔn)差函數(shù)(sd)。對(duì)于二元數(shù)值數(shù)據(jù)還用到協(xié)方差(cov),對(duì)于二元分類數(shù)據(jù)則可以用交叉聯(lián)列表函數(shù)(table)。下文講述在初級(jí)統(tǒng)計(jì)學(xué)中最常用到的三類函數(shù)。
一、數(shù)據(jù)匯總函數(shù)
我們還是以R中自帶的iris數(shù)據(jù)為例,輸入head(iris)你可以獲得數(shù)據(jù)的前6個(gè)樣本及對(duì)應(yīng)的5個(gè)變量。取出最后兩列數(shù)據(jù)作為講解的對(duì)象:Species表示花的種類,Petal.Width表示花瓣寬度
data=iris[,c(4,5)]
下一步我們想計(jì)算不同種類花瓣的平均寬度,可以使用tapply函數(shù),在計(jì)算前先用attach命令將data這個(gè)數(shù)據(jù)框解包以方便直接操作其變量,而不需再用$符號(hào)。
attach(data)
tapply(X=Petal.Width,INDEX=Species,F(xiàn)UN=mean)
結(jié)果如下
setosa versicolor virginica
0.246 1.326 2.026
和tapply類似的還有sapply函數(shù),在進(jìn)一步講解前初學(xué)者還需搞清楚兩種數(shù)據(jù)表現(xiàn)方式,即stack(堆疊數(shù)據(jù))和unstack(非堆疊數(shù)據(jù)),上面的data就是一個(gè)堆疊數(shù)據(jù),每一行表示一個(gè)樣本。而非堆疊數(shù)據(jù)可以根據(jù)unstack函數(shù)轉(zhuǎn)換而來(lái)
data.unstack=unstack(data)
head(data.unstack)
你應(yīng)該明白這二者之間的區(qū)別了,如果要對(duì)非堆疊數(shù)據(jù)計(jì)算不同種類花瓣的平均寬度,可以利用如下函數(shù)。
sapply(data.unstack,F(xiàn)UN=mean)
結(jié)果是一樣的,也就是說(shuō)tapply對(duì)應(yīng)于stack數(shù)據(jù),而sapply對(duì)應(yīng)于unstack數(shù)據(jù)
二、概率計(jì)算函數(shù)
如果給定一種概率分布,通常會(huì)有四類計(jì)算問(wèn)題:
計(jì)算其概率密度density (d)
計(jì)算其概率分布probability(p)
計(jì)算其百分位數(shù)quantile (q)
隨機(jī)數(shù)模擬random (r)
記住上面四類計(jì)算對(duì)應(yīng)的英文首字母,再對(duì)照下表就很容易計(jì)算各種概率問(wèn)題了。
舉例來(lái)講,我們求標(biāo)準(zhǔn)正態(tài)分布曲線下小于1的面積p(x《1),正態(tài)分布是norm,而分布函數(shù)是p,那么使用pnorm(1)就得出了結(jié)果0.84;若計(jì)算扔10次硬幣實(shí)驗(yàn)中有3次正面向上的概率,類似的dbinom(x=3,size=10,prob=0.5)得出0.11
三、抽樣函數(shù)
我們想從1到10中隨機(jī)抽取5個(gè)數(shù)字,那么這樣來(lái)做:首先產(chǎn)生一個(gè)序列,然后用sample函數(shù)進(jìn)行無(wú)放回抽取。
x=1:10
sample(x,size=5)
有放回抽取則是
sample(x,size=5,replace=T)
sample函數(shù)在建模中經(jīng)常用來(lái)對(duì)樣本數(shù)據(jù)進(jìn)行隨機(jī)的劃分,一部分作為訓(xùn)練數(shù)據(jù),另一部分作為檢驗(yàn)數(shù)據(jù)。
評(píng)論