R語言數據處理方法~小結(轉)


  文章目錄

  1. R自帶函數

  2. reshape2數據重構

  3. dplyr

  4. tidyr

  5. 字符串處理

  1. R自帶函數

  1.1 轉置

  使用函數t()可對一個矩陣或數據框進行轉置,對於數據框,行名將變成變量(列)名。

  

  數列array進行維度轉換 aperm

  

  1.2 整合數據aggregate

  在R中使用一個或多個by變量和一個預先定義好的函數來折疊(collapse)數據。調用格式為:

  aggregate(x, by, FUN)

  其中x是待折疊的數據對象,by飾一個變量名組成的列表,這些變量將被去掉以新的觀測,而FUN則是用來計算表述性統計量的標量函數,它將被用來計算新觀測中的值。

  

  by中的變量必須在一個列表中(即使只有一個變量)。也可以在列表中為各組聲明自定義的名稱,例如by=list(Group.cyl=cyl,Group.gears=gear)。

  

  1.3 apply

  待整理

  1.4 union和intersect

  

  1.5 合並 cbind和rbind

  縱向合並數據通常用於向數據框中添加觀測。

  (1)rbind() :縱向合並兩個數據框(數據集)

  (2)cbind() :橫向合並兩個數據框(數據集)

  注:兩個數據框行(列)數必須相同。如果x中擁有y中沒有的變量,在合並它們之前需做以下處理:

  (1)刪除dataframeA中的多余變量;

  (2)在dataframeB中創建追加的變量並將其值設為NA(缺失)。

  

  1.6 匹配合並 merge

  merge效果同dplyr的join,join的效力更高。

  (1)inner_join 等價於 merge(all=F)

  (2)left_join 等價於 merge(all.x=T, all.y=F)

  (3)right_join 等價於 merge(all.x=F, all.y=T)

  (4)full_join 等價於 merge(all=T)

  

  1.7 排除重復數據 unique

  unique 函數可以去掉向量、數據框或類似數列的數據中重復的元素。

  

  2. reshape2包

  首先將數據“融合”(melt),以使每一行都是一個唯一的標識符-變量組合。然后將數據“重鑄”(cast),可以使用任何函數對數據進行整合成想要的任何形狀。

  注:reshape包的重鑄函數為cast(),reshape2包的重鑄函數為dcast()和acast()

  

  2.1融合-melt

  數據集的融合是將它重構為這樣一種格式:每個測量變量獨占一行,行中帶有要唯一確定這個測量所需的標識符變量。

  

  2.2重鑄-dcast和acast

  Use acastor dcastdepending on whether you want vector/matrix/array output or data frame output. Data frames can have at most two dimensions.

  1.dcast——返回的結果是一個數據框

  2.acast——返回的結果可以是向量、矩陣或者數組

  調用格式為:

  

  其中md為已融合的數據,formula描述想要的結果,FUN是(可選的)數據整合函數。

  接受的公式形如:

  在這個公式中,rowvar1 + rowvar2 + ... 定義了要划掉的變量集合,以確定各行的內容,而colvar1 + colvar2 + ... 則定義了要划掉的、確定各列內容的變量集合。

  

  

  3. dplyr

  3.1 基本操作

  3.1.1 數據類型

  將過長過大的數據集轉換為顯示更友好的 tbl_df 類型

  

  3.1.2 篩選filter

  按給定的邏輯判斷篩選出符合要求的子數據集, 類似於 base::subset() 函數

  

  用R自帶函數實現:

  除了代碼簡潔外, 還支持對同一對象的任意個條件組合, 如:

  3.1.3 排列 arrange

  

  用R自帶函數實現:

  

  3.1.4 選擇select

  用列名作參數來選擇子數據集:

  

  排除列名:

  select的特殊函數

  (1)starts_with(x, ignore.case = TRUE): names starts with x

  (2)ends_with(x, ignore.case = TRUE): names ends in x

  (3)contains(x, ignore.case = TRUE): selects all variables whose name contains

  (4)matches(x, ignore.case = TRUE): selects all variables whose name matches the regular expression x

  (5)num_range("x", 1:5, width = 2): selects all variables (numerically) from x01 to x05.

  (6)one_of("x", "y", "z"): selects variables provided in a character vector.

  (7)everything(): selects all variables.

  

  ":" 選擇連續列,contains來匹配列名

  同樣類似於R自帶的subset() 函數.

  

  3.1.5 添加新變量mutate

  對已有列進行數據運算並添加為新列:

  

  mutate_each()

  對每一列運行窗體函數。

  plyr::mutate() 與 base::transform() 相似, 優勢在於可以在同一語句中對剛增加的列進行操作。

  

  通過data.frame有可以實現

  3.1.6 匯總summarise

  

  count()

  

  3.1.7 tally

  

  3.2 分組group_by

  當對數據集通過 group_by() 添加了分組信息后,mutate(), arrange() 和 summarise() 函數會自動對這些 tbl 類數據執行分組操作 (R語言泛型函數的優勢).

  

  另: 一些匯總時的小函數

  n(): 計算個數 n_distinct(x): 計算 x 中唯一值的個數

  3.3 鏈式操作(管道) %>% 或 %.%

  dplyr包還新引進了一個操作符,讀成then,使用時把數據名作為開頭, 然后依次對此數據進行多步操作。比如:

  

  按數據處理的思路寫代碼, 一步步深入, 既易寫又易讀, 接近於從左到右的自然語言順序, 對比一下用R自帶函數實現的.

  

  文章里還表示: 通過 %>% 那段代碼比跑上面這段代碼,運算速度提升很多倍.

  至於這個新鮮的概念會不會和 ggplot2 里的 + 連接號一樣, 發揮出種種奇妙的功能呢? 還是在實際使用中多體驗感受吧.

  3.5 數據匹配合並join

  (1)inner_join(x, y) :只包含同時出現在x,y表中的行

  (2)left_join(x, y) :包含所有x中以及y中匹配的行

  (3)semi_join(x, y) :包含x中,在y中有匹配的行,結果為x的子集

  (4)anti_join(x, y) :包含x中,不匹配y的行,結果為x的子集,與semi_join相反

  (5)full_join(x, y) :包含所以x、y中的行

  (6)right_join(x, y) :包含所有y中以及x中匹配的行

  

  3.6 連接數據庫

  (1)dplyr 可以連接數據庫

  (1)使用與本地數據框操作一樣的語法

  (3)只支持生成SELECT語句

  (4)支持SQLite, PostgreSQL/Redshift, MySQL/MariaDB, BigQuery, MonetDB

  3.7 利用窗體函數變換數據

  

  4. tidyr

  tidyr包的作者也是Hadley Wickham, 與dplyr包結合使用,是reshape2包的替代。(先挖坑...)

  5. 字符串處理

  5.1 字符個數 nchar

  nchar()能夠獲取字符串的長度,它和length()的結果是有區別的。

  

  5.2 連接字符 paste

  paste()不僅可以連接多個字符串,還可以將對象自動轉換為字符串再相連,另外它還能處理向量,所以功能更強大。

  

  paste默認的分隔符是空格,必須指定sep=""。還有一個collapse參數,可以把這些字符串拼成一個長字符串,而不是放在一個向量中。

  5.3 分割字符 strsplit

  

  5.4 提取字符 substr與substring

  

  5.5 替換字符 sub和gsub

  (1)sub 只做一次替換(不管有幾次匹配)

  (2)gsub 把滿足條件的匹配都做替換

  

  雖然sub和gsub是用於字符串替換的函數,但嚴格地說R語言沒有字符串替換的函數,因為R語言不管什么操作對參數都是傳值不傳址。所以原字符串並沒有改變,要改變原變量我們只能通過再賦值的方式。

  

  sub和gsub函數可以使用提取表達式(轉義字符+數字)讓部分變成全部

  

  5.6 字符查詢匹配 grep

  (1)grep 返回匹配項的下標

  (2)grepl 返回所有查詢結果的邏輯向量

  (3)regexpr

  (4)gregexpr

  (5)regexecregexpr、gregexpr和regexec這三個函數返回的結果包含了匹配的具體位置和字符串長度信息,可以用於字符串的提取操作。

  

  5.7 其他

  (1)大小寫轉換 tolower與toupper

  (2)列表轉換為向量unlist

  (3)unlist(x, recursive = TRUE, use.names = TRUE)

  (4)重復輸入rep()

  

 

轉自:http://mt.sohu.com/20161021/n470849946.shtml

 


免責聲明!

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



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