【R學習筆記】- 數據整形 - dplyr and tidyr

2021-03-02 沈夢圓
dplyr包裡的group_by()和summarise(),這兩個函數我用過,tidyr包沒接觸過,但接觸過類似裡面的gather()、spread()函數,是reshape2包裡的melt()、cast()函數。此外data.table包也有reshape2包類似的功能。今天這兩個包是同一個人寫的,他還開發ggplot2包,前面用來導入spass數據的haven包也是他的作品。今天沒有看說明書,就是簡單試用兩個包的幾個函數,如下:

準備數據

我們用上次做最後一道二項分布檢驗的數據。

library(dplyr)

testdata <-  data.frame(ill=c(0,1,2,3),family=c(112,20,11,7))
testdata <- mutate(testdata, ill_number = ill*family)
p <- sum(testdata$ill_number)/(sum(testdata$family)*3)
x <- seq(0, 3,by =1)
testdata$P1 <- dbinom(x,3,p)
testdata <- mutate(testdata, theory_family = P1*family)
str(testdata)

## 'data.frame':    4 obs. of  5 variables:##  $ ill          : num  0 1 2 3##  $ family       : num  112 20 11 7##  $ ill_number   : num  0 20 22 21##  $ P1           : num  0.63606 0.31063 0.05057 0.00274##  $ theory_family: num  71.2383 6.2126 0.5562 0.0192

Syntax - Helpful conventions for wrangling

使用tbl_df()函數,tbl’s are easier to examine than data frames

testdata_tbl_df <- tbl_df(testdata)
str(testdata_tbl_df)

## Classes 'tbl_df', 'tbl' and 'data.frame':    4 obs. of  5 variables:##  $ ill          : num  0 1 2 3##  $ family       : num  112 20 11 7##  $ ill_number   : num  0 20 22 21##  $ P1           : num  0.63606 0.31063 0.05057 0.00274##  $ theory_family: num  71.2383 6.2126 0.5562 0.0192

跟str()功能怎麼看起來一樣呢?

glimpse(testdata_tbl_df)

## Observations: 4## Variables: 5## $ ill           <dbl> 0, 1, 2, 3## $ family        <dbl> 112, 20, 11, 7## $ ill_number    <dbl> 0, 20, 22, 21## $ P1            <dbl> 0.636056, 0.310632, 0.050568, 0.002744## $ theory_family <dbl> 71.238272, 6.212640, 0.556248, 0.019208

Reshaping Data - Change the layout of a data set

testdata_tbl_df

## # A tibble: 4 x 5##     ill family ill_number       P1 theory_family##   <dbl>  <dbl>      <dbl>    <dbl>         <dbl>## 1     0    112          0 0.636056     71.238272## 2     1     20         20 0.310632      6.212640## 3     2     11         22 0.050568      0.556248## 4     3      7         21 0.002744      0.019208

Gather columns into rows:

library(tidyr)

testdata2 <- gather(testdata_tbl_df, "taxon", "n", c(2,5))

## Warning in if (!is.finite(x)) return(FALSE): 條件的長度大於一,因此只能用其## 第一元素

testdata2

## # A tibble: 8 x 5##     ill ill_number       P1         taxon          n##   <dbl>      <dbl>    <dbl>         <chr>      <dbl>## 1     0          0 0.636056        family 112.000000## 2     1         20 0.310632        family  20.000000## 3     2         22 0.050568        family  11.000000## 4     3         21 0.002744        family   7.000000## 5     0          0 0.636056 theory_family  71.238272## 6     1         20 0.310632 theory_family   6.212640## 7     2         22 0.050568 theory_family   0.556248## 8     3         21 0.002744 theory_family   0.019208

前天我們是重新生成數據表的,效果是一樣的,但是如果數據量多,上面的方法就很方便幫我們做數據變形啦。

testdata3 <- data.frame(ill=testdata$ill,family=c(testdata$family,testdata$theory_family),txon=c("real","real","real","real","theory","theory","theory","theory"))testdata3

##   ill     family   txon## 1   0 112.000000   real## 2   1  20.000000   real## 3   2  11.000000   real## 4   3   7.000000   real## 5   0  71.238272 theory## 6   1   6.212640 theory## 7   2   0.556248 theory## 8   3   0.019208 theory

Spread rows into columns:

spread(testdata3, key = txon, value = family)

##   ill real    theory## 1   0  112 71.238272## 2   1   20  6.212640## 3   2   11  0.556248## 4   3    7  0.019208

更多函數tidyr包

separate() 一列按分隔符分割為多列

`unite()``將多列按指定分隔符合併為一列

dplry包

select() 按照列名篩選列,可結合starts_with,ends_with,contains,matches,one_of,num_range和everything等使用

filter() 按照已定條件對行做過濾,類似標準函數subset

arrange() 對數據進行排序,類似標準函數order

summarise() 對數據進行匯總操作,可結合group_by使用,類似標註函數aggregate

join(),set(),distinct(),sample(),bind(),ifelse()

參考資料

數據整合神器之tidyr包 

數據整合神器之dplyr包 

Data Wrangling with dplyr and tidyr Cheat Sheet

R語言學習筆記歷史記錄

基礎系列

R學習筆記-0-開始學習

R學習筆記-1-語法基礎

【資料庫學習筆記-2】R VS 資料庫

繪圖系列

用R繪製覆蓋深度的頻數直方圖

【R語言】韋恩圖的簡單繪製

數據分析系列

【學習筆記】宏基因組的差異基因分析-0

PANDA姐的轉錄組入門(7):差異基因分析-1

PANDA姐的轉錄組入門(8):差異基因結果注釋

統計學習系列

【好書分享】如何系統用R學習統計學?

【用R學統計】第一周統計練習-1

【用R學統計】第一周統計練習-2

【用R學統計】第一周統計練習-3

【用R學統計】第二周統計練習-1

相關焦點

  • dplyr和tidyr簡介|數據處理
    數據處理兩大利器:dplyr和tidyr1 dplyr 簡介dplyr是Hadley Wickham
  • R語言 | 數據操作dplyr包
    [更新~] Python網絡爬蟲與文本數據分析公眾號只帶著Python字眼,卻分享著R語言,不務正業,任性了~dplyr簡介dplyr是R語言的數據分析包,很像python中的pandas,能對dataframe
  • 《實習日記》| 7月20日 R語言筆記——dplyr
    7月20日R語言筆記——dplyr7月20日R語言筆記——dplyr五個基礎函數1.mutate(),新增列2.select
  • 【數據整理】R用tidyr包進行數據操作
    在這篇文章中,我會向你們展示如何用tidyr包進行數據操作。Tidyr包是由Hadely Wickham先生創建的,這個包提高了整理原始數據的效率,而且通常在連接詞之間使用。我們常說當把每個列都看作是一個變量,而每行都當作是它的函數的時候,這時我們就說這些數據需要進行整理。
  • 【好書共享】《R for Data Science》的中譯版
    有問題先谷歌,不行再上stackoverflow(要學會科學提問),最後就是R社區RStudio blog和r-bloggers;Panda姐的學習筆記去年年底大致看完了hadley大神的《R for Data Science》:http://r4ds.had.co.nz/,前面三部分認真看了,後面模型和交流部分簡單翻閱了下,我寫了幾篇簡單的學習筆記:1:寫了四篇學習筆記
  • 《實習日記》| ​7月21日 R語言學習筆記——tidyr
    7月21日R語言學習筆記——tidyr7月21日R語言學習筆記——tidyr一、數據清理扁變長長變扁二、分割和合併原始數據分割合併三
  • 【數據管理】Tidyverse:R 語言學習之旅的新起點
    學習R語言的傳統路徑(base R first)多是從變量類型、數據結構、流程控制、循環與自定義函數,也就是以R程式設計作為起點,接著依照數據處理、視覺化、統計與機器學習等應用偏好延續下一個學習的旅程;由tidyverse
  • 寫給零基礎同學的R語言第四篇教程-神奇R包dplyr
    這是一個根據學習小組提出的問題優化過的教程  這坨包是對表格進行進一步操刀的工具,還是屬於數據處理的基本功。值得一提的是,他的操作格式必須是tidy data,這就要用到神器tidyr了。這個教程代碼必須手打,不要複製,否則練不好的。
  • R語言 | 數據操作tidyr包
    [更新~]Python網絡爬蟲與文本數據分析tidyr包
  • R語言筆記-dplyr-2-表操作
    表操作基礎多表操作列操作基本操作多種函數功能當前列行操作構造數據集行匯總統計分組操作添加分組刪除分組變量動詞
  • R數據科學--初見
    終於你跨越茫茫宇宙,來到生信星球,發現了初學者的新大陸前些天豆豆花花各入手一本學R必備的神書《R數據科學》,花花完結了零基礎入門R語言系列和ggplot系列。現在開始跟著這本書的思路走,仔細端詳R語言。如果你還不了解這本書,👇看這裡。
  • R語言學習指南(3) tidyverse的基礎使用
    tidyverse是為數據科學設計的R軟體包,它包含(ggplot2、dplyr、tidyr、stringr、magrittr、tibble)等一系列熱門軟體包,學好tidyverse的使用可也讓你站上另一個高度,從而高效的處理數據,因此本文檔不僅僅做一些案例介紹,而是希望以較為正確的學習方法來介紹R語言,使大家少走彎路,快速入門掌握R語言
  • 使用dplyr進行數據操作(30個實例)
    該軟體包由最受歡迎的R程式設計師Hadley Wickham編寫,他編寫了許多有用的R軟體包,如ggplot2,tidyr等。本文包括一些示例和如何使用使用dplyr軟體包來清理和轉換數據。這是一個關於數據操作和數據處理的完整教程。什麼是dplyr?dplyr是一個強大的R軟體包,用於處理,清理和匯總非結構化數據。
  • R語言dplyr包學習筆記(吐血整理宇宙無敵詳細版) - CDA數據分析師
    出處:AI入門學習dplyr包主要用於數據清洗和整理,主要功能有:行選擇、列選擇、統計匯總、窗口函數、數據框交集等是非常高效、友好的數據處理包,學清楚了,基本上數據能隨意玩弄,對的,隨意玩弄,簡直大大提高數據處理及分析效率。我以為,該包是數據分析必學包之一。學習過程需要大量試驗,領悟其中設計的精妙之處。
  • 果子的R語言數據挖掘課程設計及複習
    在這個文檔裡,我們講完了所有數據框該有的操作,而且都是基於R語言的基礎包,即使後面的tidyr和dplyr不掌握,這裡的知識也夠了。第二,掌握tidyr和dplyr包裡面的幾個重要函數這些功能在接下來的GEO和TCGA練習中中反覆出現,我常常用他們進行一個系列的批量處理,在這裡可能初學者最難理解的是符號%>% 。對應到linux裡面就是管道,即,把上一步的輸出直接傳到下一步,成為下一步函數的輸入。
  • R語言數據處理方法~小結
    R自帶函數2. reshape2數據重構3. dplyr4. tidyr5. 字符串處理1. R自帶函數1.1 轉置使用函數t()可對一個矩陣或數據框進行轉置,對於數據框,行名將變成變量(列)名。(1)rbind() :縱向合併兩個數據框(數據集)(2)cbind() :橫向合併兩個數據框(數據集)註:兩個數據框行(列)數必須相同。如果x中擁有y中沒有的變量,在合併它們之前需做以下處理:(1)刪除dataframeA中的多餘變量;(2)在dataframeB中創建追加的變量並將其值設為NA(缺失)。
  • 超級乾貨 :手把手教你學習R語言(附資源連結)
    如果您更傾向於在線交流方式學習R語法,DataCamp(https://www.datacamp.com/courses/free-introduction-to-r)提供的免費在線R教程是很好的資源。還可以選擇後續課程:中級R編程(https://www.datacamp.com/courses/intermediate-r)。
  • 獨家 | 手把手教你學習R語言(附資源連結)
    如果您更傾向於在線交流方式學習R語法,DataCamp(https://www.datacamp.com/courses/free-introduction-to-r)提供的免費在線R教程是很好的資源。還可以選擇後續課程:中級R編程(https://www.datacamp.com/courses/intermediate-r)。
  • R語言基於dplyr實現數據快捷操作
    R語言在處理大數據方面一直是被人詬病的地方,那麼有人就為R語言打造了一個dplyr包可以實現高效的數據預處理,減少內存的消耗,提升處理效率
  • 30 天學會R DAY 15:tidyr包,數據整理另外一個利器
    第15天  tidyr包,R語言數據整理又一利器tidyr包 用來處理寬數據和長數據,用來進行字符串變量的拆分和合併