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