准備數據是數據分析的第一步,由數據構成集合,我們稱作數據集,數據集的結構是行列式的,行表示觀測,列表示變量。把數據讀入到R中,轉換為合適的數據結構,能夠提高數據分析的效率。在數據分析中,常用的存儲數據的結構有標量、向量、因子和數據框,另外,還有矩陣和列表,多樣化的數據結構賦予了R靈活處理數據的能力,本文簡單介紹常用的數據結構(標量、向量、因子和數據框)及其使用方法。
一,常用的數據結構
標量通常是常量,每一個標量都有特定的數據類型,常用的數據類型是數值類型,字符類型,邏輯類型和日期類型。
對於邏輯類型,可能的值是TRUE和FALSE,用於邏輯操作的運算符:與(&)、或(|)、非(!)
R語言中經常會遇到一些特殊值:
- 缺失值 NA(Not Avaiable),是不可用的縮寫;
- NaN為“不是一個數”,意味着計算沒有數學意義;
- NULL值,空值,表示一個空的變量,不會占用任何空間,通過is.null(x)來測試變量是否為NULL值;
- 特殊的數字:Inf、-Inf 表示正無窮,負無窮;
1,向量
向量是用於存儲同一類型的一維數組,同一向量中無法存儲不同類型的數據,標量是只含一個元素的向量。向量使用c()函數來定義,向量元素的數據類型必須相同。
myvector <- c("a","b","c")
2,因子
因子是一個枚舉類型,用於表示類別。因子有字面標簽(Lable)和級別(Level)兩個屬性。函數factor()以一個整數向量的形式存儲類別。
參數:levels代表原始類別名稱,lables相當於對類別名稱進行重命名。
factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)
例如,定義一個向量,把向量轉化為因子,對因子的級別進行重命名。
> sex<-c("男","女","男") > f<-factor(sex,levels=c("男","女"),labels=c("male","female")) > f [1] male female male Levels: male female
通過函數levels(f)和nlevels(f)查看因子的級別和級數:
> levels(f) [1] "male" "female" > nlevels(f) [1] 2
3,數據框
數據框是數據分析中,最常用的存儲結構,其最大的特征是:不同的列可以包含不同的數據類型,同一列的數據類型必須相同。
數據框可以通過函數data.frame()創建:
data.frame(..., row.names = NULL, check.rows = FALSE, check.names = TRUE, fix.empty.names = TRUE, stringsAsFactors = default.stringsAsFactors())
創建數據框的參數注釋:
- ...:用於指定數據框的數據,通常是多個向量,每個變量元素的類型必須相同,所有變量的長度必須相同,可以指定變量的名稱,例如,var1=c(1:5),var2=c("a","b","c","d","e")。
- row.names:字符串向量,用於指定行的名稱
- check.rows:邏輯值,檢查行名稱是否和行的數量匹配
- check.names:邏輯值,檢查變量的名稱,確保變量名稱合法
- fix.empty.names:邏輯值,當設置為TRUE時,自動為沒有名稱的變量重命名,默認值是TRUE;當設置為FALSE時,為無名變量保留名稱“”;
- stringsAsFactors:邏輯值,是否把字符串類型的變量轉換為因子類型
二,創建數據框
創建數據框的方法有多種,常用的方法有三種,根據實際的業務場景,選擇合適的方法。
1,使用data.frame()函數
這種方法最簡單,但創建的數據框包含的數據相對較少。
> age<-c(13,15,17,20) > name<-c("s1","s2","s3","s4") > stu<-data.frame(age,name) > stu age name 1 13 s1 2 15 s2 3 17 s3 4 20 s4
2,從文件中導入數據
使用read.table()函數,從帶分隔符的文本文件中導入數據,該函數的格式是:
mydata <- read.table(file, options)
常用的選項是:
- header:邏輯值,表示文件的第一行是否包含變量的標題;
- sep:表示在同一行內,用於分割變量值的分隔符,默認值是",";
- row.names:字符串類型的向量,用於指定行的名稱。可以是一個向量,包含所有數據行的名稱,也可以指定一個字符串,該字符串是文件的列名,那么數據集使用該列的值作為行的名稱。
- col.names:字符串類型的向量,如果文件的第一行不包含變量的標題,使用該參數指定變量的名稱;如果參數header=FALSE,col.names參數被省略了,變量會被命名為V1、V2,以此類推。
- na.strings:用於表示缺失值的字符串向量,在讀取數據時,當變量值匹配這些字符串中的任意一個時,把變量的值轉換為NA。
- colClass:用於指定每一個變量的數據類型,例如,colClasses=c("numeric","character","NULL"),當類為NULL時,表示跳過該列。
- quote:用於對有特殊字符的字符串划定界限的符號,默認值是雙引號或單引號。
- skip:讀取數據前跳過的行數,常用於跳過文件開頭的注釋行。
- stringAsFactors:邏輯值,默認值是TRUE,用於指定是否把字符向量轉換為因子。
在處理大型文本數據時,設置colClasses參數,把stringAsFactors設置為FALSE,能夠顯著提高數據處理的速度。
舉個例子,從csv文件中讀取數據,文件的第一行是列名:
mydata <- read.table("stu.csv",header=TRUE,sep=",",row.names="StudentID")
三,使用R連接數據庫
通過ODBC驅動程序連接數據庫,用戶需要安裝ODBC驅動程序,然后創建ODBC數據源。在R腳本中引用數據源,從數據庫中讀取數據,對數據進行分析。
1,創建ODBC數據源
step1:從管理員工具中選擇ODBC Data Source (64-bit),添加用戶數據源:

step2:選擇驅動程序,ODBC Driver 13 for SQL Server

step3:輸入ODBC數據源的名稱,想要連接的SQL Server的名稱:

step4:選擇驗證模式
在Windows域賬戶中,選擇集成Windows驗證模式

step5:選擇默認連接的數據庫

step6:使用默認的配置

step7:測試數據源,點擊OK,創建數據源

step8,查看創建的用戶數據源(DSN)

2,引用ODBC數據源
首先需要安裝RODBC包,並在R腳本中引用包:
install.packages("RODBC") library(RODBC)
該包中主要包含三個常用的函數,分別用於連接ODBC數據源,從數據庫中執行查詢返回數據框,關閉數據源。
channel <- odbcConnect(dsn,uid="",pwd="") sqlQuery(channel,query) close(channel)
舉個例子,從ODBC數據源中,執行SQL語句,返回數據框,並及時關系連接。
> library(RODBC) > myconn <- odbcConnect("test odbc") > mydata <- sqlQuery(myconn,"SELECT [ID] ,[Name] ,[CreateTime] FROM [DB_test].[dbo].[Users]") > close(myconn) > mydata ID Name CreateTime 1 1 Vic 2017-11-09 15:58:07 2 2 Joe 2017-11-09 15:58:07 >
四,檢查對象的屬性
創建數據框之后,需要檢查數據框的各個屬性,這是對准備的數據做一個初步檢查。
1,查看對象的結構
> str(mydata) 'data.frame': 2 obs. of 3 variables: $ ID : int 1 2 $ Name : Factor w/ 2 levels "Joe","Vic": 2 1 $ CreateTime: POSIXct, format: "2017-11-09 15:58:07" "2017-11-09 15:58:07"
2,查看對象的行數量和變量數量
> NROW(mydata) [1] 2 > NCOL(mydata) [1] 3 > dim(mydata) [1] 2 3
3,查看數據框的變量名
> names(mydata) [1] "ID" "Name" "CreateTime"
4,查看數據框的頭部或尾部數據行
head(mydata)
tail(mydata)
參考文檔:
