R實踐 第二篇:創建數據集


准備數據是數據分析的第一步,由數據構成集合,我們稱作數據集,數據集的結構是行列式的,行表示觀測,列表示變量。把數據讀入到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)

 

參考文檔:

Connect R to SQL Server 2012 and “14”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM