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








評論