"R實戰(zhàn)"專題·第4篇
編輯 | 科白君
本期推送內(nèi)容
按個人的要求來創(chuàng)建含有研究信息的數(shù)據(jù)集,這是任何數(shù)據(jù)分析的第一步碗殷。同時精绎,這也是學(xué)習(xí)R語言過程重要的入門環(huán)節(jié)。特別是初學(xué)過程锌妻,更多的是模仿學(xué)習(xí)代乃。由于不理解數(shù)據(jù)結(jié)構(gòu),導(dǎo)致無法正確模仿數(shù)據(jù)格式并無法正常運行代碼仿粹。因此搁吓,本期介紹R語言的基礎(chǔ)內(nèi)容:數(shù)據(jù)集概念,數(shù)據(jù)結(jié)構(gòu)吭历、數(shù)據(jù)輸入及導(dǎo)出堕仔。主要講解相應(yīng)內(nèi)容的R包及函數(shù)使用,希望大家學(xué)習(xí)后能解決以下問題:1)?數(shù)據(jù)集有哪些類型的變量組成晌区;2)?清楚數(shù)據(jù)集的數(shù)據(jù)結(jié)構(gòu)摩骨;3)?讀取各類型文件的數(shù)據(jù);4)?成功導(dǎo)出所需要的數(shù)據(jù)朗若。
想學(xué)習(xí)R語言的朋友可以持續(xù)關(guān)注微信公眾號:科白君的土壤世界
一恼五、數(shù)據(jù)集的概念
數(shù)據(jù)集通常是由數(shù)據(jù)構(gòu)成的一個矩形數(shù)組,行表示觀測哭懈,列表示變量灾馒。在R中,數(shù)據(jù)集包括以下兩步:1)選擇一種數(shù)據(jù)結(jié)構(gòu)來儲存數(shù)據(jù)银伟;2)將數(shù)據(jù)輸入或?qū)氲竭@個數(shù)據(jù)結(jié)構(gòu)中你虹。另外,R主要可處理的數(shù)據(jù)類型包括數(shù)值型彤避、字符型傅物、邏輯型(TRUE or FALSE)、復(fù)數(shù)型(虛數(shù))和原生型(字節(jié))琉预。
二董饰、數(shù)據(jù)結(jié)構(gòu)的類型
R擁有許多用于存儲數(shù)據(jù)的對象類型,包括標量圆米、向量卒暂、矩陣、數(shù)組娄帖、數(shù)據(jù)框和列表也祠。它們在儲存數(shù)據(jù)的類型、創(chuàng)建方式近速、結(jié)構(gòu)復(fù)雜度诈嘿,及定位和訪問其中某元素的方法等均有所差異堪旧。接下來一一介紹。
1)標量
與C語言不同奖亚,R語言中淳梦,單個數(shù)據(jù)(標量)沒有單獨的數(shù)據(jù)類型,它只是向量的一種特例昔字,標量以單元素向量的形式出現(xiàn)爆袍。標量是只含一個元素的向量,例如f <- 3作郭、g <- "US"和h <- TRUE陨囊。它們用于保存常量。因此夹攒,R中最基本的數(shù)據(jù)類型是向量谆扎。
2)向量
向量是用于存儲數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組芹助。執(zhí)行組合功能的函數(shù)c()可用來創(chuàng)建向量。例如:
我們可以使用a[c(2, 4)]訪問向量a中的第二個和第四個元素闲先。此外状土,我們具體看下面例子:
3)矩陣
矩陣是一個二維數(shù)組,只是每個元素都擁有相同的數(shù)據(jù)類型(同上三種)伺糠∶晌剑可用函數(shù)matrix()創(chuàng)建矩陣。
我們可以使用下標和方括號來選擇矩陣中的行训桶、列或元素累驮。x[i, ]指矩陣中x中的第i行,x[i, j]指第i行第j個元素舵揭。選擇多行或多列時谤专,下標i和j可為數(shù)值型向量。For example:
4)數(shù)組
數(shù)組(array)與矩陣類似午绳,但緯度可以大于2置侍。數(shù)組可以用array函數(shù)構(gòu)建,例如:
### vector包含數(shù)組中的數(shù)據(jù)拦焚,dimen.是數(shù)值型向量蜡坊,給出各維度下標的最大值,而dimnames是可選的赎败、各維度名稱標簽的列表秕衙。
5)數(shù)據(jù)框
由于不同的列包含不同類型的數(shù)據(jù),數(shù)據(jù)框的概念較矩陣來說更一般僵刮。通常數(shù)據(jù)框是R中最常處理的數(shù)據(jù)結(jié)構(gòu)据忘。數(shù)據(jù)框可通過函數(shù)data.frame()創(chuàng)建:
具體例子:
關(guān)于選取數(shù)據(jù)框中的元素的方式有很多種鹦牛,我們可以使用矩陣中的方括號標記法,也可直接指定列名:
6)因子
類別(名義型)變量和有序類別(有序型)變量在R中稱為因子(factor)若河。因子在R中非常重要能岩,因為它決定了數(shù)據(jù)的分析方式以及如何進行視覺呈現(xiàn)。例如:
7)列表
列表(list)是R的數(shù)據(jù)類型中最為復(fù)雜的一種萧福。通常拉鹃,列表就是一些對象或成分的有序集合。列表允許你整合若干對象到單個對象名下鲫忍。例如膏燕,某個列表中可能包含若干向量、矩陣悟民、數(shù)據(jù)框坝辫,甚至其他列表的組合∩淇鳎可用list()函數(shù)構(gòu)建列表:
具體例子:
提取數(shù)據(jù):
三近忙、數(shù)據(jù)的輸入
使用R進行數(shù)據(jù)分析的時候,首先要導(dǎo)入數(shù)據(jù)智润。R語言支持的數(shù)據(jù)類型很多及舍,包括、excel文件窟绷,csv文件锯玛,txt文件等。很多人初學(xué)者甚至還沒開始就已經(jīng)對R語言放棄了兼蜈,正是倒在了數(shù)據(jù)導(dǎo)入這一步攘残。下面給大家提供幾種常見的數(shù)據(jù)導(dǎo)入方法。
1)使用鍵盤手動輸入數(shù)據(jù)
有兩種常見的方式:用R內(nèi)置的文本編輯器和直接在代碼中導(dǎo)入數(shù)據(jù)为狸。首先歼郭,利用文本編譯器。
R中的函數(shù)edit()自動調(diào)用一個手動輸入數(shù)據(jù)的文本編譯器辐棒。步驟如下:
①創(chuàng)建一個空的數(shù)據(jù)框/矩陣实撒,其中變量名和變量的類型需與理想中的最終數(shù)據(jù)集一致;
②針對這個數(shù)據(jù)對象調(diào)用文本編譯器涉瘾,輸入數(shù)據(jù)知态,并將結(jié)果保存回此數(shù)據(jù)對象。
例子:先創(chuàng)建一個名為data的數(shù)據(jù)框立叛,含有三個變量:數(shù)值型负敏,字符型和數(shù)值型。然后使用文本編譯器秘蛇,鍵入數(shù)據(jù)其做,最后保存結(jié)果顶考。
通過edit()函數(shù)調(diào)用出數(shù)據(jù)編輯器,如下圖
R軟件彈出數(shù)據(jù)編輯器后妖泄,我們就可以點擊第四列格子進行變量的定義驹沿。例如這里點擊"var4"后,就會彈出一個編輯器蹈胡,這里我們就可以對變量的變量名和類型(數(shù)值渊季,字符)進行定義。
定義好變量后罚渐,可以進行手動輸入數(shù)據(jù)却汉。不過這種方式只適合少量的數(shù)據(jù)輸入,當數(shù)據(jù)量比較大時荷并,建議使用其他的方式導(dǎo)入數(shù)據(jù)合砂。
此外,可以直接在程序中嵌入數(shù)據(jù)集源织,例如:
2)使用函數(shù)導(dǎo)入數(shù)據(jù)(主要以excel文件格式為主)
①導(dǎo)入csv或txt文件翩伪,使用基礎(chǔ)的read.table()函數(shù)導(dǎo)入數(shù)據(jù)。另外谈息,也可以使用read.csv()函數(shù)幻工。該函數(shù)可以讀入一個表格格式的文件并保存為一個數(shù)據(jù)框±杈ィ基本的語法表達式:
主要的參數(shù)理解:
file:文件路徑(注意:Windows路徑要用斜杠 "?/ "?or雙反斜杠 " \\ ")。
header:默認為FALSE当悔,即數(shù)據(jù)框的列名默認系統(tǒng)自帶的V1傅瞻,V2...Vn,為TRUE時第一行作為每列的列名盲憎。
sep:分隔符嗅骄,默認為空格,可以設(shè)置為逗號(comma) sep=","饼疙,分號(semicolon) sep="?; "及制表符(tab)溺森。
row.names:是可選參數(shù),表示行標識符的變量窑眯。當row.names=1時表示第一列作為每一行的行名屏积,當row...=2時,表示第二列磅甩,數(shù)字表示某一列炊林。特別是,該參數(shù)使用的時候卷要,該列中不能存在重復(fù)名渣聚,否則報錯独榴。
具體:
②導(dǎo)入excel文件,需要用到R包library(xlsx)奕枝,可以直接導(dǎo)入Excel工作表棺榔。但是要確保第一次使用前先進行下載和安裝。同時也需要xlsxJars和rJava包還有openxlsx包隘道,及一個正常工作的Java安裝(http://java.com)症歇。優(yōu)勢:一個文件夾存儲多個sheet,數(shù)據(jù)讀取的時候不需要新建多個文件薄声。基本的語法表達式:
主要的參數(shù)理解:
file:文件路徑(注意:Windows路徑要用斜杠 "?/ "or雙反斜杠 " \\ ")当船。
sheet:n表示xlsx格式下,不同sheet的表格默辨。n=1表示讀取第一個sheet德频,以此類推。特別是缩幸,如果漏寫n會報錯壹置。
具體過程:
四、數(shù)據(jù)的導(dǎo)出
通常在分析時候表谊,我們需要用到計算后的結(jié)果钞护,需要把計算的結(jié)果導(dǎo)出。這里我們常用到的函數(shù)有write.table爆办,write.csv來導(dǎo)出txt难咕,csv格式的文件。另外距辆,write.xlsx用來導(dǎo)出xlsx格式的文件余佃。這里,我們選擇最基礎(chǔ)的write.table的語法表達式進行介紹跨算,剩下的導(dǎo)出方式建議大家用help()函數(shù)進行查閱或 ?函數(shù)名進行查閱:
x:需要導(dǎo)出的數(shù)據(jù)爆土,這里是指前面賦值過的數(shù)據(jù)。
file:導(dǎo)出的文件路徑诸蚕。
sep:分隔符步势,默認為空格(" "),也就是以空格為分割列背犯。
row.names:是否導(dǎo)出行序號坏瘩,默認為TRUE,也就是導(dǎo)出行序號漠魏。
col.names:是否導(dǎo)出列名桑腮,默認為TRUE,也就是導(dǎo)出列名蛉幸。
quote:字符串是否使用引號表示破讨,默認為TRUE丛晦,也就是使用引號表示。
例如:將數(shù)據(jù)框C輸出為.csv文件
Tips:
1. 單個向量中的數(shù)據(jù)必須擁有相同的類型或模式(數(shù)值型提陶、字符型或邏輯型)烫沙,同一向量中無法混雜不同類型的數(shù)據(jù)。
2. 矩陣都是二維的隙笆,與向量相似锌蓄,僅能包含一種數(shù)據(jù)類型。超過二維時撑柔,考慮使用數(shù)組瘸爽。當數(shù)據(jù)為多種類型時,可考慮使用數(shù)據(jù)框铅忿。
3. 另外剪决,在已經(jīng)構(gòu)建好的數(shù)據(jù)框里,除了通過edit()能夠編輯檀训,fix()函數(shù)也可以編輯數(shù)據(jù)框里的數(shù)值型和字符型變量柑潦。
4. write.table / read.table 既可以讀取txt文件也可以導(dǎo)入csv格式的文件。