dplyr | 數據導入和預處理的常用函數

2021-03-02 R語言學堂

在正式分析數據前,我們通常需要先預處理一下數據,比如篩選有效樣本,定義變量格式,處理缺失值等,目的是把數據整理成比較清潔的形式,便於後續處理,而R的tidyverse系列工具包針對此提供了豐富多樣的處理方案。本篇內容主要介紹常用的數據導入函數和dplyr包中的一些重要函數。

1 數據導入

R支持多種數據格式,最常見的是csv和excel文件。

1.1 導入csv文件

read.table()和read.csv()是R基礎包utils中的函數(基礎包會自動加載,相關函數可以直接調用),二者均可讀取csv格式文件。

data <- read.table(file, header = FALSE, sep = "")

data <- read.csv(file, header = TRUE, sep = ",")

兩個函數的主要參數均為前三個參數,其中第一個參數file為文件地址,第二個參數header表示是否以首行為標題,第三個參數sep表示分列符。兩個函數後兩個參數的默認值不同,read.table()默認不以首行為標題、不分列,read.csv默認以首行為標題、以逗號,分列。

csv本身是以逗號為分隔的文件,是否以首行為標題要根據實際情況。假設用fileaddress表示文件地址,那麼兩個函數導入csv數據的代碼分別如下:

# 首行為標題
data <- read.table(fileaddress, header = TRUE, sep = ",")

data <- read.csv(fileaddress)

# 首行不為標題
data <- read.table(fileaddress, sep = ",")

data <- read.csv(fileaddress, header = FALSE)

1.2 導入excel文件

R基礎包中沒有直接能讀取excel文件的函數,需要借用其他功能包,常用的有readxl和xlsx兩個工具包,對應的函數分別是read_excel()和read.xlsx()。

library(readxl)

data <- read_excel(path, sheet = NULL, col_names = TRUE)

根據excel文件的具體格式可以選擇使用read_xls()和read_xlsx()函數,當批量化讀取數據且兩種格式並存時,可以使用通用函數read_excel()。path參數表示文件地址,sheet參數表示工作表序號,無默認值,col_names參數表示列名,默認為「是」。

xlsx包安裝比較麻煩,需要先安裝Java程序。首先進入Java官網,點擊「所有Java下載」,下拉網頁找到對應的Java脫機版本,需要注意的是Java的位數必須與使用的R的位數一致,比如均為64位或32位。Java安裝文件夾默認為「C:\Program Files\Java\jre1.8.0_271」(最後的文件夾編號視版本而變化)不要改動。安裝成功後再在R中運行以下代碼:

install.packages("rJava")
install.packages("xlsxjars")
install.packages("xlsx")
Sys.setenv(JAVA_HOME="C:\\Program Files\\Java\\jre1.8.0_271")

Sys.setenv()用於設置系統環境變量,運行後需要重新啟動R才能生效。重啟後就可以正常加載xlsx了。read.xlsx()的主要參數如下:

data <- read.xlsx(file, sheetIndex, header = TRUE, encoding = "unknown")

2 數據篩選、轉換等操作

在數據導入後,一般會首先進行刪除無效樣本、變量,利用原有變量生成新變量等操作,常用函數名稱及其功能如下:

filter():按行篩選樣本;
select():按列選擇變量;
mutate:根據一個或多個變量生成新變量或重定義已有變量,原變量仍然保留;
transmute():根據一個或多個變量生成新變量或重定義已有變量後,其他變量不再保留。

library(tidyverse)

data <- mtcars  # 假設導入的數據
summary(data)  # 查看data的變量和數據特徵

data %>%
  filter(cyl == 6) %>% # 樣本篩選操作,只保留變量cyl為6的樣本
  select(mpg, disp, hp) %>%  # 變量選擇操作,只保留這三個變量
  select(-mpg) %>% # 變量反向選擇操作,刪去此變量,其他變量保留
  mutate(newvar = disp * hp) -> newdata  # 生成新變量操作

newdata %>%
  transmute(newvar = disp * hp) ->  newdata2

3 數據框拼接、連接操作

數據框的合併是指將兩個數據框整合成一個數據框,分為直接按行或列拼接和按共同變量連接兩種,常用的函數名稱及功能如下:

bind_cols:增加合併,將兩個數據框相同行拼接成同一行,要求它們行數相同,即
bind_rows:增加合併,要求兩個數據框列數相同。

R基礎包中的cbind()和rbind()函數也有類似功能,但運行速度較慢。

left_join():左連接,即以第一個數據框為參照;
right_join():右連接,即以第二個數據框為參照。

這兩個連接方案會保留參照數據框的所有行,而非參照數據框只保留能匹配到參照數據框的行,參照數據框不能匹配非參照數據框的行對應非參照數據框的變量記為NA;無論是左連接 還是右連接,合併後的數據框變量排序都是第一個數據框的原變量在前,第二個數據框的原變量在後;如果非參照數據框有多行與參照數據框的一行對應,那麼合併後的數據框相比於參照數據框會多出若干行以一一連接這些行。

full_join():全連接,保留兩個數據框所有的行,不能匹配的行對應變量記為NA;
inner_join():內連接,只保留兩個數據框能匹配的行;
semi_join():半連接,保留第一個數據框能與第二個數據框匹配的內容,但不把第二個數據框的變量加入合併的數據框;
anti_join():反向連接,保留第一個數據框不能與第二個數據框匹配的內容。

library(tidyverse)

# 準備兩個數據框,ID為公共變量
df1 <- mtcars %>%
  slice(1 : 10) %>%
  select(mpg) %>%
  mutate(ID = c(1 : 10))

df2 <- iris %>%
  slice(1 : 12) %>%
  select(Sepal.Length) %>%
  mutate(ID = floor(runif(12, min = 2, max = 11)))

# left_join
left_join(df1, df2, by = "ID")

# 公共變量名稱在兩個數據框中不同
df11 <- rename(df1, ID1 = ID)
df22 <- rename(df2, ID2 = ID)
left_join(df11, df22, by = c("ID1" = "ID2"))

# right_join
right_join(df1, df2, by = "ID")

# full_join
full_join(df1, df2, by = "ID")

# inner_join
inner_join(df1, df2, by = "ID")

# semi_join
semi_join(df1, df2, by = "ID")

# anti_join
anti_join(df1, df2, by = "ID")

4 命名、排序、分組等操作

rename:重命名變量;
arrange():按變量進行行排序,優先級高的變量寫在前面,默認升序,降序時使用desc(var);
relocate():改變變量的列順序;
group_by():按變量分組;
ungroup():取消分組;
summarise():匯總操作。

summary(mtcars)
mtcars %>%
  select(mpg, disp, hp, cyl) %>%
  slice(1 : 10) %>%
  rename(mpg1 = mpg) %>%
  arrange(disp, desc(hp)) %>% # 按disp升序、hp降序排序
  relocate(hp, disp) %>% # 將變量hp移到disp前面
  group_by(cyl) %>%  # 按cyl分組
  mutate(mean = mean(disp)) %>%  # 按以上分組求disp的均值
  ungroup() -> data  # 取消分組

data  %>%
  group_by(cyl) %>%
  summarise(mean = mean(disp), n = n()) # 匯總
  

相關焦點

  • 強大的dplyr包實現數據預處理
    下面將介紹強大的dplyr包,其可以非常靈活、快速的實現數據的預處理。#tbl對象使用dplyr包預處理時建議使用tbl_df()函數或tbl_cube()函數或tbl_sql()函數將原數據轉換為tbl對象,因為dplyr包用C語言開發,對處理tbl對象是非常迅速的。
  • R語言 | 數據操作dplyr包
    類型的數據做很方便的數據處理和分析操作。tidyverse含有readr,所以不用導入readr#用readr包導入csv數據aapl <- readr::read_csv('data/aapl.csv') ## Parsed with column
  • dplyr和tidyr簡介|數據處理
    數據處理兩大利器:dplyr和tidyr1 dplyr 簡介dplyr是Hadley Wickham
  • dplyr中filter函數的總結
    dplyr中filter函數的總結dplyr是R語言中數據比較常用的包之一。其中最常用的兩個函數是filter和select。
  • R 機器學習 | 數據預處理
    本文為 機器學習實戰 | 數據預處理(基於 Python) 的姊妹篇 R 語言實現。1.
  • dplyr包-匯總數據的方法
    有朋自遠方來,不亦樂乎,並誠邀入群,以達相互學習和進步之美好心願。這是dplyr包系列第四篇文章。前三篇文章如下:1 dplyr包-列選擇的方法2 dplyr包-列變換的方法3 dplyr包-行選擇的方法前三篇文章,我們已經從數據的行與列角度,總結了dplyr包有效而高效地進行行與列的操作和處理,靈活使用dplyr包的函數集,便利我們對數據的整理工作。
  • 為什麼我們需要數據預處理?
    下面是數據預處理要採取的步驟,如圖:數據清洗: 填寫缺失的值,光滑噪聲數據,識別或刪除離群點,並解決不一致性來「清理數據」;數據集成:使用多個資料庫,數據立方體或文件;數據歸約: 用替代的,較小的數據表示形式替換元數據,得到信息內容的損失最小化,方法包括維規約,數量規約和數據壓縮;數據變換:將數據變換成使用挖掘的形式。
  • R語言基於dplyr實現數據快捷操作
    R語言在處理大數據方面一直是被人詬病的地方,那麼有人就為R語言打造了一個dplyr包可以實現高效的數據預處理,減少內存的消耗,提升處理效率
  • 使用dplyr進行數據操作(30個實例)
    本文包括一些示例和如何使用使用dplyr軟體包來清理和轉換數據。這是一個關於數據操作和數據處理的完整教程。什麼是dplyr?dplyr是一個強大的R軟體包,用於處理,清理和匯總非結構化數據。簡而言之,它使得R中的數據探索和數據操作變得簡單快捷。dplyr有什麼特別之處?
  • 【R學習筆記】- 數據整形 - dplyr and tidyr
    dplyr包裡的group_by()和summarise(),這兩個函數我用過,tidyr包沒接觸過,但接觸過類似裡面的gather()、spread
  • R語言點滴:dplyr函數與查重案例(1)
    微信公眾號:醫意貫之如有問題或建議,請公眾號留言;如果你覺得該文章對你有幫助,歡迎讚賞R語言點滴:dplyr
  • 數據處理之——dplyr
    dplyr簡介關於R中的數據處理,上期我們介紹了plyr,這期我們接著介紹數據處理相關包dplyr。
  • 強大的數據清理大師:dplyr
    。install.packages("dplyr")library(dplyr)或者直接安裝載入tidyverse(評書演義:《R for Data Science》):install.packages
  • Python數據預處理
    ,首先需要進行初步的數據探索性分析,對數據探索性分析之後要先進行一系列的數據預處理步驟。當不符合正態分布時可用箱型圖分析處理,核心結果代碼如下:數據的標準化(normalization)是將數據按比例縮放,使之落入一個小的特定區間。在某些比較和評價的指標處理中經常會用到,去除數據的單位限制,將其轉化為無量綱的純數值,便於不同單位或量級的指標能夠進行比較和加權,最典型的就是數據歸一化處理就是將數據統一映射到[0,1]區間上 。
  • R包之dplyr--處理表格數據的好幫手
    R語言作為擁有優良統計血統的程式語言,天生就適合處理各種數據框。我們以一個tcga的表型文件為例。pheno = read.table(".如果我們後面想比較腫瘤和對照的差異,把三組變成兩組,可以將Primary Tumor與Recurrent Tumor合併,這裡將兩者都改成tumorpheno
  • 使用torchtext導入NLP數據集
    從torchtext這個名字我們也能大概猜到該庫是pytorch圈中用來預處理文本數據集的庫,但這方面的教程網絡上比較少,今天我就講講這個特別有用的文本分析庫。簡介torchtext在文本數據預處理方面特別強大,但我們要知道ta能做什麼、不能做什麼,並如何將我們的需求用torchtext實現。
  • 數據整理—dplyr包(mutate系列)
    dplyr中,幾個主要函數1filter 系列  #篩選滿足條件的樣本(cases),第一篇已經講解  2select 系列  #篩選滿足條件的變量,第二篇已經講解3mutate 系列  #生成新的變量4summarise 系列 #概括數據集信息5join 系列  #關聯函數,同SQL中的join在數據處理過程中
  • Python數據分析|線性回歸
    壹 數據導入Python下載及環境配置這裡就不贅述了哈,網上教程非常多,我們直接一開始就進入乾貨,打它一個開門見山。①導入Python常用數據分析庫:常用的numpy、pandas、matplotlib先導入。
  • 果子的R語言數據挖掘課程設計及複習
    第二,掌握tidyr和dplyr包裡面的幾個重要函數這些功能在接下來的GEO和TCGA練習中中反覆出現,我常常用他們進行一個系列的批量處理,在這裡可能初學者最難理解的是符號%>% 。對應到linux裡面就是管道,即,把上一步的輸出直接傳到下一步,成為下一步函數的輸入。
  • 全棧數據之R語言常用包和函數
    全棧數據之路系列:全棧數據之Linux常用命令總結全棧數據之MySQL常用命令總結全棧數據之Python常用工具和函數《R語言實戰》,這是高濤、肖楠等翻譯的一本書詳細全面介紹了入門、圖形、統計、回歸、方差、功效分析、廣義線性模型、主成分、因子分析