【tidyverse】R中的tidyverse入門

2021-03-02 R語言

筆者邀請您,先思考:

1 什麼是整潔數據?

2 tidyverse怎麼使用?

tidyverse是由RStudio首席科學家Hadley Wickham開發的R套裝的集合。 這些包作為大數據分析管道的一部分可以很好地協同工作。要了解這些工具及其協同工作的更多信息,請閱讀R for data science。 對於R的新手,請查看我之前的Storybench教程:RStudio筆記本中的R入門。

以下教程將介紹tidyverse中用於構建和分析數據集的一些基本功能。 這是關於清理數據的三部分系列中的第一部分,使用tidyverse在R中對其進行可視化。

加載包

首先,安裝tidyverse,然後加載tidyverse和magrittr。

suppressWarnings(suppressMessages(install.packages("tidyverse")))
suppressWarnings(suppressMessages(library(tidyverse)))
suppressWarnings(suppressMessages(library(magrittr)))

學習「管道」

我們將在本教程中使用「管道」。 管道使您的代碼讀起來更像一個句子,從左到右分支。 所以像這樣:f(x)變成這樣:x%>%f和這樣的東西:h(g(f(x)))變成這樣:x%>%f%>%g%>%h

「管道」來自magrittr包。 請閱讀此處的使用方法。

什麼是整潔的數據?

「整潔數據」這一術語描述了構建數據集以使分析和可視化更容易的標準化方法。 如果您使用過SQL和關係資料庫,那麼您將認識到大多數這些概念。 Hadley Wickham從Edgar F. Codd的正常形式中獲取了許多技術術語,並將其應用於單個數據表。 更重要的是,他將這些原則轉化為幾乎任何進行數據分析的人應該能夠識別和理解的術語。

整潔數據的核心原則

整潔數據有三個原則:

變量構成列

觀察組成行

值放在單元裡面

如果您處理了前兩個原則,第三個原則幾乎是給定的,因此我們將重點關注這些原則。

一個假設的臨床試驗來解釋變量

變量是可以採用多個值的任何度量。根據數據集來自的欄位,變量可以稱為自變量或因變量,特徵,預測變量,結果,目標,響應或屬性。

變量通常可以分為三類:固定變量(在收集數據之前已知的特徵),測量變量(包含研究或調查期間捕獲的信息的變量)和派生變量(在現有變量分析過程中創建的變量)。

這是一個例子:假設臨床醫生正在測試一種新的抗高血壓藥物。他們招募了30名患者,他們都接受了高血壓治療,並將他們隨機分成三組。臨床醫生給三分之一的患者服用藥物八周,另外三分之一的人服用安慰劑,最後三分之一照常照顧。在研究開始時,臨床醫生還收集有關患者的信息。這些測量包括患者的性別,年齡,體重,身高和基線血壓(BP前)。

對於該假設研究中的患者,假設他們被隨機分組的組(即藥物,對照組或安慰劑組)將被視為固定變量。前BP(和後BP)測量將被視為測量變量。

假設在試驗結束後 - 收集了所有數據 - 臨床醫生想要一種方法來確定試驗中血壓降低的患者數量(是或否)?一種方法是創建一個新的分類變量,用於識別血壓低於140 mm Hg的患者(1 =是,0 =否)。這個新的分類變量將被視為派生變量。

我所描述的虛構研究的數據也包含時間的基本維度。如描述所示,在服用藥物(或安慰劑)之前和之後測量每位患者的血壓。因此,可以想像這些數據可以包括入組日期(患者進入研究的日期),血壓前測量日期(基線測量),給藥日期(患者服用藥物),血壓測量日期(在研究結束時進行血壓測量)。

什麼是觀察?

觀察是分析的單位,或者是由變量描述的「事物」。 堅持我們假設的血壓試驗,患者將成為分析的單位。 在整潔的數據集中,我們希望每行代表一個患者。 觀察有點像名詞,從某種意義上說,確定一個確切的定義可能很困難,而且它往往很大程度上取決於數據的收集方式以及您嘗試回答的問題類型。 觀察的其他術語包括記錄,案例,示例,實例或樣本。

什麼是數據表?

表由值組成。 正如您可能已經猜到的那樣,值是電子表格中不是行或列的東西。 我認為將值視為表中的物理位置是有幫助的 - 它們位於變量和觀察的交叉點。

例如,假設一個數字,75,放在一個表裡。

我們可以說這個數字的位置是第2列和第2行的交集,但這並沒有告訴我們多少。 數據75在沒有任何關於它代表什麼的信息的情況下無意義地放在一個表中。 一張表上的一個數字引出了一個問題,「七十五是什麼?」

這就是為什麼將表視為變量(在列中)和觀察(在行中)有助於獲得每個單元格中值的背後的含義。 在添加變量(列)和觀察(行)名稱後,我們可以看到該75是患者3號(患者_3)的舒張前血壓(Pre_Dia_BP)。

值得指出的是,同樣的信息可以用另一種方式呈現:

該布置顯示相同的信息(即,對於患者編號3的舒張前血壓),但是現在列meas_type包含關於75代表哪個血壓測量的信息(預)。 哪一個很整潔? 為了回答這個問題,我們將建立一個寵物示例來建立一些基本的整理術語。

「tibble」如何比table更好

我們將使用下面的調用來創建鍵值對引用tibble。 在使用tidyverse的包時,tibbles是一種優化的存儲數據的方法,你應該在這裡閱讀更多關於它們的信息。

我們將從頭開始構建一個tibble,定義列(變量),行(觀察)和每個單元格的內容(值)。 通過這樣做,我們將能夠跟蹤重新排列這些數據時發生的情況。 這個簡短練習的目標是使鍵值對更易於查看和理解。

我們的新對象(key_value)使用以下基礎邏輯構建。

行使用數字(1-3)和下劃線()編號,並始終顯示在值的前面。 列使用下劃線()和數字(1-3)編號,並始終顯示在值的末尾。

library(tidyr)
library(tibble)

key_value <- tribble(
  ~row, ~key1, ~key2, ~key3, 
  "1", "1_value_1","1_value_2","1_value_3", 
  "2", "2_value_1", "2_value_2", "2_value_3", 
  "3", "3_value_1", "3_value_2", "3_value_3" 
)
key_value

因此,key1和row = 1的值是1_value_1; key2和row = 2的值是2_value_1; 等等。

第一個數字#表示行(觀察)位置,尾隨數字#表示key_列(變量)位置。

使用tidyr包

tidyr是tidyverse的一個軟體包,它可以幫助您構建(或重新構建)數據,從而更容易實現可視化和建模。 這是tidyr頁面的連結。 整理數據集通常涉及將行轉換為列(擴展)或將列切換為行(收集)的某種組合。

我們可以使用我們的key_value對象來探索這些函數的工作方式。

使用 gather

「Gather佔用多列並摺疊成鍵值對,根據需要複製所有其他列。 當你注意到你的列不是變量時,你可以使用gather()。「這就是tidyverse定義gather的方式。

讓我們首先將三個關鍵列收集到一個列中,並使用包含其所有值的新列值。

kv_gathered <- key_value %>% 
  gather(key, 
         value, 
         key1:key3, 
         na.rm = TRUE 
  )
kv_gathered

注意結構

我把這種數據安排稱為「堆疊」。 威克姆將此稱為索引。 但重要的是,我們使用gather()來挖掘最初分散在三列中的數據,並將它們分為兩列:鍵和值。

使用鍵值對

鍵值對將鍵和值配對。 這意味著當我們將key指定為新列的名稱時,該命令將獲取前三個鍵列並將其堆疊在其中。 然後我們將value指定為新列的名稱及其對應的值對。

行列怎麼樣? 我們留下這列,因為我們希望它保持相同的安排(即1,2,3)。 當鍵和值列堆疊時,這些行會在列中重複出現,

在此過程中也沒有任何損失。 我仍然可以查看行:3,鍵:2並查看結果值3_value_2。

使用spread

現在我們將鍵和值列重新分配回原始排列(key_1,key_2和key_3三列)。spread描述顯示:「跨多個列傳播鍵值對。」

kv_spreaded <- kv_gathered %>% 
  spread(
    key, 
    value
  )
kv_spreaded

Spread將堆疊在兩列(鍵和值)中的值移動到三個不同的key_列中。

鍵值對是我們可以用來重新排列數據以使其整潔的索引。

哪個版本的key_value很整潔? 我們說整齊的數據意味著「每列一個變量,每行一個觀察」,因此滿足這個條件的安排是key_gathered數據集。 但我想強調的是,如果不了解這些變量和觀察結果實際包含的內容,我們就無法真正知道這些數據是否整潔。

完整代碼

library(tidyr)
library(tibble)

key_value <- tribble(
  ~row, ~key1, ~key2, ~key3, 
  "1", "1_value_1","1_value_2","1_value_3", 
  "2", "2_value_1", "2_value_2", "2_value_3", 
  "3", "3_value_1", "3_value_2", "3_value_3" 
)
key_value

kv_gathered <- key_value %>% 
  gather(key, 
         value, 
         key1:key3, 
         na.rm = TRUE 
  )
kv_gathered


kv_spreaded <- kv_gathered %>% 
  spread(
    key, 
    value
  )
kv_spreaded

原文連結:
http://www.storybench.org/getting-started-with-tidyverse-in-r/

版權聲明:作者保留權利,嚴禁修改,轉載請註明原文連結。

數據人網是數據人學習、交流和分享的平臺http://shujuren.org 。專注於從數據中學習到有用知識。
平臺的理念:人人投稿,知識共享;人人分析,洞見驅動;智慧聚合,普惠人人。
您在數據人網平臺,可以1)學習數據知識;2)創建數據博客;3)認識數據朋友;4)尋找數據工作;5)找到其它與數據相關的乾貨。
我們努力堅持做原創,聚合和分享優質的省時的數據知識!
我們都是數據人,數據是有價值的,堅定不移地實現從數據到商業價值的轉換!

點擊閱讀原文,進入數據人網。

相關焦點

  • R入門?從Tidyverse學起!
    tidyverse 是什麼tidyverse出自於R大神Hadley Wickham之手,他是Rstudio首席科學家,也是ggplot2的作者。tidyverse就是他將自己所寫的包整理成了一整套數據處理的方法,包括ggplot2,dplyr,tidyr,readr,purrr,tibble,stringr, forcats。
  • R語言 | Tidyverse包入門介紹
    今天,我們講一個「讓R能夠和Python在數據處理方面一較高下」的擴展包:tidyverse包。以此為契機,統計學家Hadley Wickham開發出了一系列數據處理的包,整合成為一個,這就是tidyverse包,它裡面包括了與數據處理相關的內容,如ggplot2,dplyr,tidyr,tibble等等。你可以直接調用tidyverse,也可以調用它所轄屬的包。下面,我們講解一些tidyverse中可能使用到的函數,幫助你快速上手這個方便的東西。
  • 哈佛R語言課程--8.Tidyverse
    2.將示例數據讀取進R讀取剛下載的新文件並加載tidyverse:res_tableOE <- read.csv(file = "data/Mov10oe_DE_results.csv", row.names = 1)library(tidyverse)Tidyverse基礎知識Tidyverse軟體包套件向用戶介紹了一組數據結構
  • R語言學習指南(3) tidyverse的基礎使用
    tidyverse是為數據科學設計的R軟體包,它包含(ggplot2、dplyr、tidyr、stringr、magrittr、tibble)等一系列熱門軟體包,學好tidyverse的使用可也讓你站上另一個高度,從而高效的處理數據,因此本文檔不僅僅做一些案例介紹,而是希望以較為正確的學習方法來介紹R語言,使大家少走彎路,快速入門掌握R語言
  • 【數據管理】Tidyverse:R 語言學習之旅的新起點
    2 您用tidyverse包嗎?作為起點的路徑則是近年新興的學習模式(tidyverse first),理念是在一開始先不談[] 、[[]] 、$ 流程控制與循環等內容,而從dplyr 的函數應用開頭,目的是在最短時間讓初學者切入數據處理與視覺化的應用,讓R 語言能夠很快地在課業、研究或者工作派上用場。
  • R語言入門教程 | tidyverse包之數據處理
    包,《R語言實戰》並未涉及,這也導致R語言的學習難度增加,今天我們給大家引入tidyverse包的學習。tidyverse 包是 Hadley Wickham 及團隊的集大成之作,是專為數據科學而開發的一系列包的合集, 基於整潔數據,提供了一致的底層設計、語法、數據結構,包括數據導入,數據規整,數據處理,可視化,建模以及形成可重複性報告數據分析的全流程。
  • tidyverse —— readr包
    相比於base包,其優勢在於速度快,能提速十餘倍;相比於data.table包,其速度稍有遜色,作者Hadley大叔表示,差個1.2到2倍速度的樣子,但是,在讀取過程中能對數據進行更加精細的解析。下面介紹其主要函數。主要參考R for Data Science一書,http://r4ds.had.co.nz/data-import.html#getting-started。
  • tidyverse —— readxl包
    readxl包,讀取Excel文件專用包,有和tidyverse核心包一樣的特點,快!效率特高!話說Hadley大叔出品就沒有效率低的,可能鍵盤是借來的,著急還。獨立性高,不外部依賴Java啥的,xls和xlsx文件讀取都可以。
  • 數據清理工具簡介(Tidyverse)
    為了加快數據清理的效率,同時為以後的建模和數據可視化做準備,R語言的Tidyverse包可以提供非常優秀的數據清理、整合和可視化的「一站式服務」。安裝Tidy首先安裝Tidyverse, 代碼如下所示。其實Tidyverse是一系列優秀軟體庫的合集,其中最常用的幾個package包括 dplyr,ggplot2 和 readr 等。 if (!
  • Tidy時代R語言學習的一些ABC
    如今,tidy工具已經成為R語言中解決各種問題的生態系統,比如:tidyverse(dplyr、tidyr、purrr等):數據處理和數據操作ggplot2:可視化tidymodels因此,如何入門R語言,實際上就變成了如何入門tidyverse。
  • R語言必知必會之tidyverse(一):管道操作
    徵得張敬信老師同意,本號將轉載張老師關於R語言tidyverse包一系列文章,為大家進行醫學研究提供助力。
  • [R數據科學]tidyverse數據清洗案例詳解
    介紹本中你將學習在R中數據處理簡潔的方法,稱為tidy data。將數據轉換為這種格式需要一些前期工作,但這些工作從長遠來看是值得的。一旦你有了整潔的數據和一些包提供的整潔工具,您將花費很少時間將數據從一種表示轉換到另一種,從而可以將更多的時間花在分析問題上。
  • stringr包:tidyverse數據科學系列的核心R包之五
    前面推出了4期tidyverse數據科學系列核心R包的介紹,今天繼續來學習該系列剩下的R包。tibble包:tidyverse 數據科學系列的核心R包之四dplyr包:tidyverse 數據科學系列的核心R包之三Tidyr包:tidyverse 數據科學系列的核心R包之二
  • 從另一個視角看 R 語言的方言 Tidyverse
    對函數式編程的使用Tidyverse 包中另一個特殊的庫,面向 函數式編程(FP)的 purrr,有 177 個函數。關於複雜性的論點依然適用;我們再次遇到和上述 dplyr 同樣的問題,「有太多函數要學」。從入門的層次看,FP 就是調用 FP 函數以取代循環。
  • tidyverse —— forcats包
    生成因子R語言的base包中函數如dataframe等默認因子在分類變量讀入時就會生成,而tidyverse包中的readr等包則會保留數據讀入時的原樣不做改變,要生成因子則可以使用parse_factor函數進行處理。parse_factor函數更審慎一些,會對不在給定的因子水平中的變量取值一個警告,而base包中的factor則會直接將該值記為NA,不給出報錯或警告。
  • R語言學習:圖例管理,SQL語句操作數據框,tidyverse包實操,情感分析,詞雲圖
    04 tidyverse實操tidyverse包是我每天都要用的R包,用於數據管理、數據可視化和數據科學的工作關於tidyverse包的學習和交流,可以掃碼加我微信,進入R語言群,一起討論。學習資料:https://finnstats.com/index.php/2021/04/02/tidyverse-in-r/05
  • Tidyverse|tidyr數據重塑之gather,spread(長數據寬數據轉化)
    長型數據和寬型數據在數據分析中非常常見 ,其中寬型數據更具可讀性,長型數據則更適合做分析
  • R語言學習:字符串替換、tidy系列包、Bland-Altman圖、RODBC包、UMAP降維
    stringr包第一組:1 str_replace函數2 str_replace_all函數第二組:1 str_remove函數2 str_remove_all函數library(tidyverse)# 第一組:str_replace和str_replace_all函數
  • R 語言入門學習路線與資源匯總
    另外李東風老師的《R語言教程》、王敏傑老師的《數據科學中的R語言》以及張敬信老師的《R語言編程:基於tidyverse》也很不錯,極力推薦,並且這三本書也開源。5.3 dplyr包dplyr包是專門用於數據分析的一個R包,也是tidyverse數據科學系列包中的核心R包,在進行常用的數據分析操作時,比如說行篩選、行排列、選擇列、創建列等操作,可以優先使用dplyr包,簡單、方便、效率高。要了解有關dplyr包的更多信息,可以學習RStudio上的這個小手冊[43]。
  • R數據科學--初見
    強行解鎖R語言入門新姿勢為了慶祝ggplot系列完成,花花更新了菜單欄,找系列教程很方便,在這裡查看👇,還學了一下做公眾號封面👇從此不再用衣衫襤褸的小人兒!認識Rstudio的界面 3.tidyverse--一個R包合集R包是函數、數據和文檔(documentation)的集合,是對R基礎功能的擴展。R包只需安裝一次,但每次打開新的session都要重新加載。