- R語言與網絡輿情處理
- 于衛紅
- 3274字
- 2019-12-12 17:31:41
2.2 數據操作
2.2.1 基本數據類型
在R語言里操作或接觸的所有東西都稱作對象。對象有很多種類,可以包含各種類型的數據。R語言中常見的數據類型有:字符型(character)、數值型(numeric)、整型(integer)、復數型(complex)、因子型(factor)以及邏輯型(logical)。R語言里最常見的基本對象是向量(vector),一個向量可以包含同一類型的多個對象,用命令c()構造一個向量。
(1)數值型(numeric):一般數字形式的數據都為數值型(實數或者小數),從傳統的數據分類方式來看,即指定量變量。例如:

(2)整型(integer):僅含有整數,且設定數據類型為integer,否則一般為數值型。例如:

(3)復數型(complex):取值可以擴展到虛數。例如:

其中,i是個特殊符號,代表復數的虛部。
(4)邏輯型(logical):取TRUE和FALSE兩個固定值,用于指示判斷結果。例如:

(5)字符型(character):指向量中每個元素都是一個字符或字符串,即一般的數據分類方式中所說的定性變量。例如:

(6)因子型(factor):因子是一種特殊的向量類型,通常用來記錄分類數據。因子有兩種類型:有序的以及無序的。無序因子可以認為是用來標記那些有標簽有類別但是又沒有順序的數據,比如說男性和女性。有序因子可以用來標記那些有先后次序的數據,這些數據可以不是數值型的,但卻是有序的。例如,大學的助教、講師、副教授以及正教授,這就是一種有序的分類。所以可以把有序因子當作是一個整型向量,其中每個整數都有一個標簽。例如,一個由1、2、3組成的向量,1代表較高的值,2代表一個中等的值,3代表一個較低的值。這三個變量將會有三個標簽,分別是高、中、低,在R當中分別用1、2、3來表示??梢允褂胒actor()函數來創建因子,命令如下。

創建一個含有兩個level(yes和no)的簡單因子,命令如下:

一個向量可以包含單一類型的多個對象,因此可以有實數向量或整數向量。但是一個標準的向量不能包含不同類型的對象,同一個向量里的所有對象都必須是同一類型的。如果一個向量中包含兩種不同類型的對象,那么R會創建最低級公共類型的向量。此時R不會報錯,而是將向量強制轉換成為二者的最低級公共類型。例如:

若想強制轉換對象的類型,可以使用as.numeric()、as.logical()、as.charcater()函數進行強制轉換,例如:

強制轉換也不一定總能成功,如果它失敗了就會返回NA值。所有無意義的強制轉換就會導致NA值。

2.2.2 數據結構
R語言中的數據結構主要包括向量、矩陣、列表、數組和數據框。
1.向量
最簡單的數據結構就是由一串有序數值構成的數值向量。假如要創建一個含有5個數值的向量x,且這5個值分別為1,3,5,7和9,則R語言中的命令為:

2.矩陣
矩陣是R語言里的一類特殊向量,它們不是一種單一的數據類型,而是有維度屬性的向量。維度屬性是一個整型向量,它的長度為2。其中,第一個數字是矩陣的行數,第二個數字是矩陣的列數。

矩陣是按列生成的,可以把這個過程想象成把一個向量里的所有數按列填入矩陣中,先填第一列,填完第一列最后一行的數字后再填第二列,然后是第三列等。
例如,使用1~6的數列創建一個矩陣,指定這個矩陣有兩行三列,輸入命令如下。

還有一種創建矩陣的方法就是使用cbind()或rbind()函數通過綁定行或者列來創建,例如:

3.列表
可以包含多種類型的對象的向量叫作列表,列表是一個由多個對象組成的序列,只是其中每個對象的類型可以各不相同。比方說一個列表可以包含字符型、數值型和邏輯型的對象,也可以包含一個列表。列表的每個元素可以是不同類型的對象,這就讓列表可以輕松存放各種類型的數據。在R語言中列表是非常有用而且常用的對象,尤其是在和其他我們即將學到的函數類型一起使用時。例如,使用list()函數創建一個列表x,第一個元素是數值對象1,第二個元素是字符“a”,第三個是邏輯值TRUE,第四個是復數,命令如下。

在輸出結果中,列表的元素用[[]]里面的數字進行索引,所以第一個元素是向量1,第二個元素是向量“a”,第三個元素是向量TRUE,第四個元素是復數向量1+4i。
列表元素由[[]]包圍,其他向量的元素則只有[],這是把列表和其他類型的向量區分開的一種方法。
列表中的元素還可以是數據框。所以組成列表的元素可以是任何類型的對象,這也是列表會這么有用的原因。數據框可以理解成一個松散的數據集。它可以是由不同類型的列(數字、因子、字符等)組成的類矩陣。
4.數組
數組與矩陣類似,但是維度可以大于2。數組可通過array函數創建,形式如下:

例如:

5.數據框
數據框是R語言中最常處理的數據結構。R語言中的數據框由行和列組成,與矩陣不同的是,數據框中的每個列可以是不同的數據類型。數據框的每一列都有列名,每一行也可以指定行名。如果不指定行名,則用從1開始自增的序列來標識每一行。
使用data.frame()函數來初始化一個數據框。例如要定義一個student數據框,其中包括ID和Name,還有Gender以及Birthdate,則代碼為:

與矩陣一樣,使用[行Index,列Index]的格式可以訪問數據框的具體元素。
比如訪問第一行:student[1,];
訪問第二列:student[,2];
使用列的Index或者列名可以選取要訪問的那些列。比如要訪問ID和Name,則代碼為:

如果只訪問某一列,返回的是Vector類型的,則可以使用[[或者$來訪問。比如要取得所有student的Name列,則代碼為:

2.2.3 數據讀寫
1.讀數據
對R語言的初學者來講,面對一片空白的命令行窗口,第一道真正的難關也許就是數據的讀入。數據來源有很多途徑,例如從網頁抓取、公共數據源獲得、文本文件導入。R語言的數據讀取函數主要有read.table()、scan()、read.fwf()、readLines()等。下面給出幾種常用的數據讀入方法。
1)使用read.table()讀文件
read.table()函數的格式為:

例如,用read.table()讀c:\data下的文件houses.dat。

如果明確數據第一行作表頭,則使用header選項,例如:

read.table()的變形有read.csv()、read.csv2()、read.delim()、read.delim2()。前兩個讀取逗號分割的數據,后兩個讀取其他分隔符數據。
2)使用scan()函數讀文件
除了read.table()這類讀取文本文檔的函數,還可以用scan()函數讀入數據。不同的是它的返回值為列表或者向量。用scan()讀文件比read.table()更靈活,但要指定變量類型。例如,C:\data\data.dat的文件內容如下。

用scan()讀取該文件:

3)用read.fwf()讀取文件中一些固定寬度數據
read.fwf()函數的格式為:

例如,C:\data\data.txt的文件內容如下。

用read.fwf()讀取該文件:

4)使用剪貼板讀數據
如果已經有一個打開的表格,可以復制其中的內容,然后用readClipboard()或者read.table()等函數導入數據。
例如,對于一個打開的Excel文件,選擇要讀取的數據,然后使用Ctrl+C鍵復制,在R中輸入如下命令便可讀入數據:

2.寫數據
寫數據即將數據導出到某種格式的文件中。R語言提供了write.table()、cat()等函數來導出數據。不過值得指出的是,R語言能夠導出的數據格式是有限的,比如在基本包中,我們能夠導出數據的格式只有txt和csv。現在介紹一下兩個函數的用法。
1)write.table()函數
write.table()函數的格式為:

write.csv(),write.csv2()可以看作write.table()的變體,write.csv()與參數sep=“,”的write.table()是等效的。下面介紹幾個常見的參數。
x:數據集。
file:文件的路徑,包括文件名如“D:/R/data/data1.csv”。
quote:數據在寫入文件中時常用引號將其隔開,當參數為F時,文件中的數據不再用引號修飾。
append:是否追加,如果文件名已存在而沒有選擇追加,那么文件將會被覆蓋。(覆蓋時是沒有提示的,所以命名時需要注意。)
例如:
創建數據框d:

將數據框d保存為簡單文本:

將數據框保存為逗號分隔文本:

2)cat()函數
cat()函數的格式為:

cat()作為一個輸出函數與DOS命令差不多,也是將數據集或數據寫入文件中,常用參數和write.table()類似。cat()函數用來輸出,可以把多個參數連接起來再輸出(具有paste()的功能)。例如:

還可以指定一個參數file,即給定一個文件名,把結果寫到該指定的文件中,例如:

如果指定的文件已經存在則原來內容被覆蓋。加上一個append=TRUE參數可以不覆蓋原文件而是在文件末尾附加,這很適用于運行中的結果記錄。cat()的用法比較豐富,也可以用來查看文件,與format合用控制輸出格式等。
2.2.4 數據的描述性統計
描述性統計是一種從大量數據中壓縮提取信息的工具,最常用的就是summary命令,該命令對于數值變量計算了5個分位點和均值,對于分類變量則計算了頻數。例如:

描述性統計通過計算統計量等方法來描述數據的分布特征,常用的統計量包括均值、眾數、中位數、百分位數等,計算這些統計量的常用函數如表2-1所示。
表2-1 常用的統計量計算函數

- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- Software Defined Networking with OpenFlow
- Boost C++ Application Development Cookbook(Second Edition)
- Python程序設計
- 零基礎學Java(第4版)
- Java性能權威指南(第2版)
- 你不知道的JavaScript(中卷)
- D3.js By Example
- Visual Basic 6.0程序設計實驗教程
- QGIS 2 Cookbook
- Oracle數據庫編程經典300例
- 計算機應用基礎項目化教程
- FPGA嵌入式項目開發實戰
- Python 3快速入門與實戰
- SQL Server實例教程(2008版)