R需要學習第二章

主要內容

? 探索R中的數據結構

? 輸入數據

? 導入數據

? 標注數據

2.1 數據集的概念

數據集通常是由數據構成的一個矩形數組,行表示觀測,列表示變量(本書使用統計學家術語)。

數據集的行和列叫法不同,統計學家術語為觀測(observation)和變量(variable),數據庫分析師術語為記錄(record)和字段(field),數據挖掘和機器學習學科的研究者則把它們叫作示例(example)和屬性(attribute)。

圖片發自簡書App

表2-1,可以看到數據集的結構(矩形數組)以及其中包含的內容和數據類型。

PatientID是行/實例標識符,AdmDate是日期型變量,Age是連續型變量,Diabetes是名義型變量,Status是有序型變量。

在R中, PatientID 、 AdmDate 和 Age 為數值型變量,而 Diabetes 和 Status則為字符型變量。另外,你需要分別告訴R: PatientID 是實例標識符, AdmDate 含有日期數據,Diabetes 和 Status 分別是名義型和有序型變量。R將實例標識符稱為 rownames (行名),將類別型(包括名義型和有序型)變量稱為因子( factors )。

2.2 數據結構

R擁有許多用于存儲數據的對象類型,包括標量、向量、矩陣、數組、數據框和列表。

圖片發自簡書App

注意:在R中,術語 對象(object)是指可以賦值給變量的任何事物,包括常量、數據結構、函數,甚至圖形。對象都擁有某種模式,描述了此對象是如何存儲的,以及某個類。

2.2.1向量

向量是用于存儲數值型、字符型或邏輯型數據的一維數組。執行組合功能的函數 c() 可用來創建向量。各類向量如下例所示:

a <- c(1, 2, 5, 3, 6, -2, 4) #數值型向量

b <- c("one", "two", "three") #字符型向量

c <- c(TRUE, TRUE, TRUE, FALSE, TRUE, FALSE) #邏輯型向量注意,單個向量中的數據必須擁有相同的類型或模式(數值型、字符型或邏輯型)。同一向量中無法混雜不同模式的數據。

如何訪問向量中的元素?通過在方括號中給定元素所處位置的數值。如下所示:

> a <- c("k", "j", "h", "a", "c", "m")

> a[3] #訪問向量中第三個元素

[1] "h"

> a[c(1, 3, 5)] #訪問向量中第一、三、五個元素

[1] "k" "h" "c"

> a[2:6] #訪問向量中第二至第六個元素

[1] "j" "h" "a" "c" "m"

2.2.2 矩陣

矩陣是一個二維數組,只是每個元素都擁有相同的模式(數值型、字符型或邏輯型)。可通過函數matrix() 創建矩陣。

myymatrix <- matrix(vector, nrow=number_of_rows, ncol=number_of_columns,byrow=logical_value, dimnames=list(char_vector_rownames, char_vector_colnames))

其中 vector 包含了矩陣的元素,nrow和ncol 用以指定行和列的維數,dimnames 包含了可選的、以字符型向量表示的行名和列名。選項 byrow 則表明矩陣應當按行填充(byrow=TRUE )還是按列填充(byrow=FALSE ),默認情況下按列填充。

圖片發自簡書App
創建一個5*4的矩陣。

圖片發自簡書App

按行填充的2*2矩陣。

圖片發自簡書App

按列填充的2*2矩陣。

圖片發自簡書App

如上圖: 創建了一個內容為數字1到10的2×5矩陣。默認情況下,矩陣按列填充。然后,我們分別選擇了第二行和第二列的元素。接著,又選擇了第一行第四列的元素。最后選擇了位于第一行第四、第五列的元素。

矩陣都是二維的,和向量類似,矩陣中也僅能包含一種數據類型。

2.2.3 數組

數組(array)與矩陣類似,但是維度可以大于2。數組可通過 array 函數創建。

myarray <- array(cecior,dimensions,dimnames)。其中 vector( 下圖中的“1:24”) 包含了數組中的數據, dimensions (下圖中的“c(2,3,4)”)是一個數值型向量,給出了各個維度下標的最大值,而 dimnames 是可選的、各維度名稱標簽的列表。

圖片發自簡書App

上例中若是c(2,3,4)數值被改變則提示出錯,“length of 'dimnames' [1] not equal to array extent”。數組的維度需要符合數值型向量給出的各維度下標最大值。

像矩陣一樣,數組中的數據也只能擁有一種模式。從數組中選取元素的方式與矩陣相同。z[1,2,3]相當于A1B2C3為15。

2.2.4 數據框

由于不同的列可以包含不同模式(數值型、字符型等)的數據,數據框的概念較矩陣來說更為一般。它與你通常在SAS、SPSS和Stata中看到的數據集類似。數據框將是你在R中最常處理的數據結構。

下表所示的病例數據集包含了數值型和字符型數據。由于數據有多種模式,無法將此數據集放入一個矩陣。在這種情況下,使用數據框是最佳選擇。

數據框可通過函數 data.frame() 創建: mydata <- data.frame(col1,col2,col3,…)。其中列向量 col1 、 col2 、 col3 等可為任何類型(如字符型、數值型或邏輯型)。每一列的名稱可由函數 names 指定。

圖片發自簡書App


.選取數據框中元素的方式中注意$號是新出現的。它被用來選取一個給定數據框中的某個特定變量。比如:> table(patientdata$diabets,patientdata$status),表示生成糖尿病類型變量 diabetes 和病情變量 status 的列聯表。

001 attach()、detach()、和with()的使用。attach()函數可將數據框添加到R的搜索路徑中,detach()函數將數據框從搜索路徑中移除。函數 attach() 和 detach() 最好在你分析一個單獨的數據框,并且不太可能有多個同名對象時使用。with()函數用法略。

002 實例標識符

圖片發自簡書App

2.2.5因子

類別(名義型)變量和有序類別(有序型)變量在R中稱為因子(factor)。因子在R中非常重要,因為它決定了數據的分析方式以及如何進行視覺呈現。

名義型變量是沒有順序之分的類別變量。糖尿病類型 Diabetes ( Type1 、 Type2 )是名義型變量的一例。有序型變量表示一種順序關系,而非數量關系。病情Status ( poor 、improved 、 excellent )是順序型變量的一個示例。

圖片發自簡書App

具體使用如下:

圖片發自簡書App


2.2.6 列表

一般來說,列表就是一些對象(或成分,component)的有序集合。可以使用函數 list() 創建列表:mylist <- list(object1, object2, ...)。其中的對象可以是目前為止講到的任何結構。

list列表的重要性。首先,列表允許以一種簡單的方式組織和重新調用不相干的信息。其次,許多R函數的運行結果都是以列表的形式返回。

圖片發自簡書App

2.3 數據的輸入

2.3.1 使用鍵盤輸入數據。對于較大的數據集,主要從現有的文本文件、Excel電子表格、統計軟件或數據庫中導入數據。

2.3.2 從帶分隔符的文本文件導入數據。使用 read.table() 從帶分隔符的文本文件中導入數據。幫助參考help(read.table)。

2.3.3 導入 Excel 數據。函數read.xlsx() 導入一個工作表到一個數據框中。最簡單的格式是 read.xlsx(file, n)。使用install.packages("xlsx")下載xlsx包,使用以下代碼

library(xlsx)

workbook <- "c:/myworkbook.xlsx"

mydataframe <- read.xlsx(workbook, 1) 導入工作簿myworkbook.xlsx 的第一個表。

2.3.4 導入 XML 數據

2.3.5 從網頁抓取數據

2.3.6 導入 SPSS 數據。使用函數 read.spss() 導入到R中。下載安裝Hmisc 包。install.packages("Hmisc")

2.3.7 導入 SAS 數據

2.3.8 導入 Stata 數據

2.3.9 導入 NetCDF 數據

2.3.10 導入 HDF5 數據

2.3.11 訪問數據庫管理系統

2.3.12 通過 Stat/Transfer 導入數據

2.4 數據集的標注

為了使結果更易解讀,數據分析人員通常會對數據集進行標注。

2.5 處理數據對象的實用函數

圖片發自簡書App


創建于 2017-01-23

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容