官术网_书友最值得收藏!

2.3 數據的輸入

在數據分析過程中通常會面對來自多種數據源和數據格式的數據,需要將這些數據導入而進行數據分析,并匯報分析結果。R提供了適用范圍廣泛的數據導入工具。R可從鍵盤、文本文件、Microsoft Excel和Access、流行的統計軟件、特殊格式的文件,以及多種關系型數據庫中導入數據。本節將介紹各種數據源的導入方法。

2.3.1 使用鍵盤輸入數據

輸入數據最直接的方式就是使用鍵盤輸入。R中的函數edit()會自動調用一個允許手動輸入數據的文本編輯器,具體步驟如下。

(1)創建一個空數據框(或矩陣),其中變量名和變量類型需與預期中的最終數據集一致。

(2)針對這個數據對象調用文本編輯器,輸入數據,并將結果保存回此數據對象中。

如下例所示:

        > newdata  <-data.frame(age=numeric(0), sex=character(0), weight=numeric(0))
        > newdata <-edit(newdata)

創建一個名為newdata的數據框,它含有3個變量:age(數值型)、sex(字符型)和weight(數值型)。然后調用文本編輯器,鍵入數據,最后保存結果。

在Windows上調用函數edit()的結果如圖2-2所示。

▲圖2-2 通過編輯器輸入數據

重點提示:編輯的結果需要賦值回對象本身。函數edit()事實上是在對象的一個副本上進行操作的。如果不將其賦值到一個目標,所有修改將會全部丟失。

單擊列的標題,就可以用編輯器修改變量名和變量類型(數值型、字符型)。你還可以通過單擊未使用列的標題來添加新的變量。編輯器關閉后,結果會保存到之前賦值的對象中。再次調用newdata <?edit(newdata),就能夠編輯已經輸入的數據并添加新的數據。語句newdata <?edit(newdata)的一種簡潔的等價寫法是fix(newdata)。

這種輸入數據的方式對于小數據集很有效。對于較大的數據集,這種方式的局限性就很明顯了,可以考慮從現有的文本文件、Excel電子表格、統計軟件或數據庫中導入數據。

2.3.2 數據集的導入

1.從帶分隔符的文本文件導入數據

可以使用read.table()從帶分隔符的文本文件中導入數據。此函數可讀入一個表格格式的文件并將其保存為一個數據框。其語法如下:

        mydata  <- read.table (file, header=TRUE, sep="delimiter", row.names="name")

其中,file是一個帶分隔符的ASCII文本文件;header是一個表明首行是否包含了變量名的邏輯值(TRUE或FALSE);sep用來指定分隔數據的分隔符;row.names是一個可選參數,用以指定一個或多個表示行標識符的變量。

如下所示:

      > Example2_1  <- read.table ("example2_1.csv", header=TRUE, sep=",")
      > Example2_1
          group    atp
      1       1  7.76
      2       2 11.14
      3       3 10.85
      4       1  7.71
      5       2 11.60
      6       3  8.58
      7       1  8.43
      8       2 11.42
      9       3  7.19
      10      1  8.47
      11      2 13.85
      12      3  9.36
      13      1 10.30
      14      2 13.53
      15      3  9.59
      16      1  6.67
      17      2 14.16
      18      3  8.81
      19      1 11.73
      20      2  6.94
      21      3  8.22
      22      1  5.78
      23      2 13.01
      24      3  9.95
      25      1  6.61
      26      2 14.18
      27      3 11.26
      28      1  6.97
      29      2 17.72
      30      3  8.68

從當前工作目錄中讀入了一個名為example2_1.csv的逗號分隔文件,從文件的第一行取得了各變量名稱,最后將結果保存到了名為Example2_1的數據框中。

注意:參數sep允許導入那些使用逗號以外的符號來分隔行內數據的文件??梢允褂胹ep="\t"讀取以制表符分隔的文件。此參數的默認值為sep="",即表示分隔符可為一個或多個空格、制表符、換行符或回車符。

默認情況下,字符型變量將轉換為因子。但是有許多方法可以禁止這種轉換行為,其中包括設置選項stringsAsFactors=FALSE,這將停止對所有字符型變量的此種轉換。還有一種方法是使用選項colClasses為每一列指定一個類,例如logical(邏輯型)、numeric(數值型)、character(字符型)、factor(因子)。

2.導入Excel數據

讀取一個Excel文件的最好方式就是在Excel中將其導出為一個逗號分隔文件(csv),并使用前文描述的方式將其導入R中。在Windows系統中,也可以使用RODBC包來訪問Excel文件。電子表格的第一行應當包含變量/列的名稱。

首先,下載并安裝RODBC包:

        > install.packages("RODBC")

然后使用以下代碼導入數據:

        > library(RODBC)
        > Example2_2  <- odbcConnectExcel("example2_2.xls")
        > mydata <- sqlFetch(Example2_2, "sheet1")
        > odbcClose (Example2_2)

這里的example2_2.xls是一個Excel文件,sheet1是要從這個工作簿中讀取工作表的名稱,channel是一個由odbcConnectExcel()返回的RODBC連接對象,mydata是返回的數據框。

3.導入SPSS數據

SPSS數據集既可以通過foreign包中的函數read.spss()導入R中,也可以使用Hmisc包中的spss.get()函數。函數spss.get()是對函數read.spss()的一個封裝,它可以自動設置后者的許多參數,讓整個轉換過程更加簡單一致,最后得到數據分析人員所期望的結果。

首先,下載并安裝Hmisc包(foreign包已被默認安裝):

        > install.packages("Hmisc")

然后使用以下代碼導入數據:

        > library(Hmisc)
        > mydata  <- spss.get("mydata.sav", use.value.labels=TRUE)

在以上代碼中,mydata.sav是要導入的SPSS數據文件,use.value.labels=TRUE讓函數將帶有值標簽的變量導入為R中水平對應相同的因子,mydata是導入后的數據框。

4.導入SAS數據

R中有幾個用來導入SAS數據集的函數,包括foreign包中的函數read.ssd()和Hmisc包中的函數sas.get()。但是,對于較新版本SAS(SAS 9.1或更高版本),這些函數并不能正常工作,因為R尚未跟進SAS對文件結構的改動。用戶可以在SAS中使用PROC EXPORT將SAS數據集保存為一個逗號分隔的文本文件,然后將帶分隔符的文本文件導入R中。

另外,Stat/Transfer軟件可以完好地將SAS數據集(包括任何已知的變量格式)保存為R數據框。

5.導入Stata數據

要將Stata數據導入R中非常簡單直接,所需代碼如下:

      Library(foreign)
      Mydata  <- read.dta("mydata.dta")

其中,mydata.dta是Stata數據集,mydata是返回的R數據框。

重點提示:進行分析之前,必須首先建立R數據集。應學會用多種方法創建R數據集,并進行瀏覽和編輯。通過本節的學習,應熟練掌握數據集的建立、保存、導入方法等。在計算機上反復操作本節的實例,可以達到熟練使用R數據集的各種編輯方法的效果。精通R數據集,對于讀者學習R可以起到事半功倍的效果。

主站蜘蛛池模板: 曲周县| 柘荣县| 宜昌市| 建水县| 晋城| 灵山县| 屯昌县| 南郑县| 无锡市| 云南省| 台南县| 思茅市| 广汉市| 沽源县| 清远市| 新源县| 潜山县| 长丰县| 贵港市| 拜泉县| 泰来县| 高雄县| 南澳县| 合山市| 余干县| 安阳县| 衢州市| 镇沅| 惠东县| 金华市| 阿拉善右旗| 呼和浩特市| 沅陵县| 天台县| 乌拉特中旗| 巨鹿县| 永新县| 陆河县| 县级市| 民乐县| 温泉县|