R2——創(chuàng)建數(shù)據(jù)集

R2——創(chuàng)建數(shù)據(jù)集

@(R2)

前言

創(chuàng)建和讀取含有研究信息的數(shù)據(jù)是數(shù)據(jù)分析的第一步。在R中,這個任務(wù)包含以下三步:

  1. 選擇一種數(shù)據(jù)結(jié)構(gòu)儲存數(shù)據(jù)
  2. 講數(shù)據(jù)輸入或?qū)氲竭@個數(shù)據(jù)結(jié)構(gòu)中
  3. 對數(shù)據(jù)進(jìn)行預(yù)處理,比如結(jié)構(gòu)化數(shù)據(jù)

本章回答了如下幾個問題:

  1. R中儲存和使用的數(shù)據(jù)結(jié)構(gòu)有哪些?
  2. 如何讀取各類來源的數(shù)據(jù)?
  3. 如何對讀取的數(shù)據(jù)進(jìn)行標(biāo)注處理?
  4. 在實際中可能使用到哪些處理數(shù)據(jù)集的函數(shù)?

數(shù)據(jù)集的概念

數(shù)據(jù)集通常是由數(shù)據(jù)構(gòu)成的一個矩陣數(shù)組,行表示觀測,列表示變量。如下圖:


數(shù)據(jù)集示例圖

R可以處理的數(shù)據(jù)類型(模式)如下圖:


R處理的數(shù)據(jù)類型.png

數(shù)據(jù)結(jié)構(gòu)

section1 向量

向量:用于存儲數(shù)值型、字符型或邏輯型數(shù)據(jù)的一維數(shù)組。
值得注意的是,單個向量中的數(shù)據(jù)必須有相同的類型或模式。同一向量中無法混雜不同模式的數(shù)據(jù)。

標(biāo)量是只含一個元素的向量,例如f<-3,g<-"US"等。它們用于保存常量。

如何創(chuàng)建向量?

    a <- c(1,2,3,4)
    b <- c("one","two")
    c <- c(TRUE,FALSE,TRUE)

如何讀取向量中的元素?

    a <- c("k","g","j","h","q","w","t","u","i")
    a[3]
    a[c(1,2,4)]
    a[2:6]

section2 矩陣

矩陣:是一個二維數(shù)組,其中每個元素都擁有相同的模式

如何創(chuàng)建矩陣?

mymatrix <- matrix(vector, nrow=number_of_row, ncol=number_of_col, byrow=logical_value, dimnames=list(char_vector_rownames,char_vector_colnames))

byrow意味著矩陣按行填充,默認(rèn)情況是按列填充。

如何讀取矩陣中的元素?

    X[i,]
    #讀取矩陣第i行
    x[,j]
    #讀取矩陣第j列
    x[i,j]
    #讀取矩陣第i行第j列的元素
    #同時,i和j可以為數(shù)值型向量,比如1:2,c(1,2,3)等
    x[i]
    #讀取矩陣按行展開的第i個元素

section3 數(shù)組

數(shù)組與矩陣類型,但是維度可以大于2。其中數(shù)組中每一個維度只能有一種模式。

如何創(chuàng)建數(shù)組?

    myarray <- array(vector, dimensions=c(nrow, ncol, dimension), dimnames=list())
    #vector中包含數(shù)組中的數(shù)據(jù);
    #dimension是一個數(shù)值型向量,給出各個維度下標(biāo)的最大值,數(shù)組的中數(shù)據(jù)的存儲量由該變量決定;
    #dimnames是可選的、各維度名稱標(biāo)簽的列表。

如何讀取數(shù)組中的元素?

讀取方式和矩陣中讀取方式類似,只是多了一個維度。

section4 數(shù)據(jù)框

數(shù)據(jù)框:不同列可以包含不同模式的數(shù)據(jù)的矩陣。

如何創(chuàng)建數(shù)據(jù)框?

    mydata <- data.frame(col1, col2, col3, ...)

如何讀取數(shù)據(jù)框中的數(shù)據(jù)?

    x[i,]
    #讀取數(shù)據(jù)框第i行
    x[,j]
    #讀取數(shù)據(jù)框第j列
    x[i,j]
    #讀取數(shù)據(jù)框第i行第j列的元素
    #同時,i和j可以為數(shù)值型向量,比如1:2,c(1,2,3)等
    x[i]
    #讀取數(shù)據(jù)框第i列
    x$varible_name
    #讀取數(shù)據(jù)框中行名為varible_name的行

簡讀取數(shù)據(jù)框中的變量的兩個方法?

  1. 使用attach()函數(shù),即可將數(shù)據(jù)框添加到R的搜索路徑中。同時,使用detach()函數(shù),可以將數(shù)據(jù)框從搜索路徑中移出。簡言之,attach()可以調(diào)用數(shù)據(jù)框中變量,detach()可以消除這種調(diào)用。如果不用detach()的話,數(shù)據(jù)框中的變量名會保存在R的工作空間中,這可能會對后續(xù)的變量命名帶來影響。所以,使用detach()是一個好的編程習(xí)慣。
  2. 使用with()函數(shù),可以解決讀取數(shù)據(jù)框中的變量后其保存在R工作空間的問題。因為with()函數(shù)會創(chuàng)造出一個和原始工作空間相對獨(dú)立的保險箱,在保險箱中調(diào)用數(shù)據(jù)框的變量將不會保存在R的工作空間中;同時,如果需要保存到R的工作空間中,可以使用<<-命名符對變量進(jìn)行命名。

with()的使用方法:

with(mtcars,{
nokeepstats <- summary(mpg)
keepstas <<- summary(mpg)
})

如何在數(shù)據(jù)框中對數(shù)據(jù)進(jìn)行實例標(biāo)志?
在R中,實例標(biāo)識符(case identifier)可通過數(shù)據(jù)框操作函數(shù)中的rowname選項進(jìn)行。

patientdata <- data.frame(patientID, age, diabetes, status, row.name=patientID)

section5 因子

因子(factor)在R中分為名義型變量和有序型變量。

如何創(chuàng)建因子?

factor()函數(shù)以一個整數(shù)向量的形式存儲類別值,整數(shù)的取值范圍是[1...k](其中k是名義變量中唯一值的個數(shù)),同時一個由字符串(原始值)組成的內(nèi)部向量將映射到這些整數(shù)上。

status <- c("poor","Improved","Excellent","poor")
status <- factor(status, order=TRUE, levels=c("poor","Improved","Excellent"))
#創(chuàng)建有序型變量;規(guī)定levels
sex <- c(1,2,1)
sec <- factor(sex, levels=c(1,2),labels=("Male","Female"))
#創(chuàng)建名義型變量;規(guī)定levels;給名義型變量貼標(biāo)簽

section6 列表

列表:是一些對象(component)的有序集合。列表允許用戶整合若干(可能無關(guān)的)對象到單個對象名下。但是對象中數(shù)據(jù)的模式必須是單一的。

如何創(chuàng)建列表?

mylist <- list(name1=object1, name2=object2, ...)

如何讀取列表中的元素?

mylist[[i]]
#讀取第i個成分
mylist[[char_name]]
mylist$char_name
#讀取名為char_name的成分
mylist[[i]][j]
#讀取第i個成分中的第j個元素;矩陣的用法類似

數(shù)據(jù)的輸入

section1 手動輸入

edit()函數(shù)

即使是手動輸入,肯定也是在excel中進(jìn)行,所以此函數(shù)意義不大??赡苤皇翘峁┮环N功能,以防萬一。

section2 文本文件的錄入

文本文件是現(xiàn)在比較常見的數(shù)據(jù)處理類型,所以會花較多時間進(jìn)行學(xué)習(xí)。文本文件分為兩種,一是結(jié)構(gòu)化數(shù)據(jù),二是非結(jié)構(gòu)化數(shù)據(jù)。通常情況下,我們需要對非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行結(jié)構(gòu)化處理,以得到可以分析的數(shù)據(jù)。

結(jié)構(gòu)化數(shù)據(jù):由二維表結(jié)構(gòu)來邏輯表達(dá)和實現(xiàn)的數(shù)據(jù)。
非結(jié)構(gòu)化數(shù)據(jù):數(shù)據(jù)結(jié)構(gòu)不規(guī)則或不完整,沒有預(yù)定義的數(shù)據(jù)模型,不方便用數(shù)據(jù)庫二維邏輯表來表現(xiàn)的數(shù)據(jù)。
二維表:在關(guān)系模型中,數(shù)據(jù)結(jié)構(gòu)表示為一個二維表,一個關(guān)系就是二維表。通常,表中每一行稱為一個記錄或一個元組,每一列稱為一個字段或?qū)傩浴?br> 簡言之,結(jié)構(gòu)化數(shù)據(jù)是類似于數(shù)據(jù)框或列表形式的數(shù)據(jù)。

設(shè)定工作空間

通常情況下,需要把待讀取的數(shù)據(jù)文件放入R指定的工作空間中,R的函數(shù)才能正確的讀取文件。當(dāng)然,也有人習(xí)慣輸入文件的完整路徑。
R:

    getwd()
    #show ur working directory
    setwd(ur_workspace_direction)
    #then put ur file into that workspace
    mydata <- read.table("file_name")
    #If u want to set it temporary,u need to type setwd(ur_workspace_direction) in Rprofile.site

RStudio:

#Tools - Global Option - General - Default working directory

read.table()

read.table()可讀入一個表格格式的文件并將其保存為一個數(shù)據(jù)框。

mydata <- read.table("file_name", header=logical_value, sep="", row.names=char_vector_rownames, col.names=char_vector_colnames, na.strings=vector, colClasses=vector, quote="", skip=numberic, stringsAsFactors=logical_value, text=char_vector)
read.table() option

read.table()中默認(rèn)header=FALSE。
中文文本讀入時,偶爾會出現(xiàn)編碼錯誤,大多可通過加入encoding="UTF-8"解決。

read.csv()

read.csv():直接讀取csv(Comma Separated Values)的函數(shù)。其中header的默認(rèn)值是TRUE。

read_excel()

在R中不能直接讀取xls/xlsx文件,同時xls/xlsx數(shù)據(jù)格式不如csv的跨平臺兼容性更好。所以,推薦將其另存為csv格式,再進(jìn)行讀取。
當(dāng)然,也可以直接讀取xls/xlsx文件,前提是安裝readxl包:

install.packages("readxl")
library(readxl)
mydata <- read_excel("file_name",col_names = T)
#詳細(xì)的參數(shù)調(diào)用看文檔

readLines()

以上介紹的函數(shù)都是用來讀取結(jié)構(gòu)化數(shù)據(jù)的,現(xiàn)在來介紹讀取非結(jié)構(gòu)化數(shù)據(jù)的函數(shù)——readLines()。
readLines()必需的參數(shù)只有一個文件名,中文文檔需要留意編碼參數(shù),即可實現(xiàn)文本按行讀入,然后每一行作為一個字符存儲起來,所以整個文本文件讀取的是一個大字符串。

數(shù)據(jù)的標(biāo)注

通常情況下,數(shù)據(jù)分析人員會對數(shù)據(jù)集進(jìn)行標(biāo)注,包括為變量名添加描述性標(biāo)簽,以及為類別型變量中的編碼添加值標(biāo)簽。

變量標(biāo)簽

R中處理變量標(biāo)簽的能力有限。所以最好使用簡潔和易區(qū)分的變量名進(jìn)行命名。

值標(biāo)簽

factor()可對類別型變量創(chuàng)建值標(biāo)簽。

laonainai <- facotr(mygroup, levels=c(1,2), labels=c("male","female"))

處理數(shù)據(jù)對象的實用函數(shù)

處理數(shù)據(jù)對象的實用函數(shù)1

處理數(shù)據(jù)對象的實用函數(shù)2

參考資料

R語千尋 | 數(shù)據(jù)的讀入
R語千尋 | 非結(jié)構(gòu)化數(shù)據(jù)--文本數(shù)據(jù)的讀入
R語言實戰(zhàn)(第2版)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在本章內(nèi)容中,數(shù)據(jù)結(jié)構(gòu)是非常重要的,對于后續(xù)的數(shù)據(jù)分析起著關(guān)鍵的作用,數(shù)據(jù)結(jié)構(gòu)是可以用來存儲數(shù)據(jù)的。 2.1 數(shù)據(jù)...
    lxmic閱讀 2,170評論 0 2
  • 在OpenGL中,大量的數(shù)據(jù)在著色器中傳遞,數(shù)據(jù)通過Buffer和Texture兩種形式組織。 1 緩存(Buff...
    RichardJieChen閱讀 8,285評論 1 10
  • 一直有想法自己寫點文字,既作為一個學(xué)習(xí)記錄的地方、見證自己一步一步的成長;又作為一個知識的索引,方便查找。學(xué)習(xí)某一...
    BB瞎BB閱讀 258評論 4 2
  • 仰望天空云魚游,俯觀清溪花飛流。 仗劍孤旅入劍閣,秋風(fēng)落筆起愁緒 天色漸晚云欲隱,久候公車頸長引。 南屏晚風(fēng)秋意濃...
    靈魂刀手閱讀 487評論 0 1
  • 01 《產(chǎn)品經(jīng)理手冊》——哥喬斯 02《結(jié)網(wǎng)》——王堅 03《人人都是產(chǎn)品經(jīng)理》——蘇杰 04 《失控》 05《用...
    下雨天怕滑倒2閱讀 790評論 0 2

友情鏈接更多精彩內(nèi)容