iT邦幫忙

0

[R語言]資料分析讀書心得05---使用dplyr做資料變換(filter,arrange,缺失值)

在前四篇文章,大概介紹了如何畫圖以及一些變數的調整,而內部的細節這邊不在做深度的討論。接著這篇文章開始要介紹另一個package dplyr ,這個套件主要用途是用來調整你的資料,包括缺失值的處理等等。而 dplyr 一樣在 tidyverse 的內部,以及我們將使用一些來自 package nycflights13 裡面的資料。

library(nycflights13)
library(tidyverse)

這次我們會使用 nycflights13 裡面的 flights 這筆資料。

glimpse(flights)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935Ex7YpAIUzt.png
我們可以看到它是 336776x19 的表格資料,也就是說它有19個變數,而在每個變數後面會有一些英文縮寫,這是代表的該欄位的資料類型,比較常見的資料型態有:

  1. int:代表整數
  2. dbl:代表雙精度浮點數
  3. chr:代表字串
  4. dttm:代表日期與時間
  5. lgl:代表邏輯向量
  6. fctr:代表因子
  7. date:代表日期

而接下來幾篇文章會為大家介紹在 dplyr 裡面幾個常用的函數。

首先會看到 filter() ,它的功能跟 subset 相似,可以擷取你想要的資料的小區塊,以底下例子來說明。

flights 是航班資料,如果今日我只想要看 1/1 的資料,我們可以試試看以下語法。

filter(flights,month==1,day==1)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935aAnXigHOto.png
我們可以看到,33萬多筆的資料中,有842筆 1/1 的資料。而 filter 的第一個參數是data,後面的參數就是你想要限制的條件,我們甚至可以試試一些真假值條件, & ! | 依序代表的是 否定 。例子如下

filter(flights,month==11|month==12)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935WexJzckDgg.png
我們就可以去擷取所有十一月跟十二月的資料,在使用 的時候,我們也用逗號作為代替。

接下來我們來看下一個函數 arrange ,顧名思義就是重排,使用方法與 filter 類似,如果我們輸入以下程式碼:

arrange(flights,year,month,day)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935KQBTsAKQK9.png
它的意思是從flights這筆資料,由year,month,day這些變數由小到大重新排列,但是因為我們這筆資料本身就是這樣的排列了。那我們可以試試下面這個與法。

arrange(flights,desc(arr_delay))

https://ithelp.ithome.com.tw/upload/images/20200810/20124935ADw3y45HwS.png
它就會將資料由 arr_delay 從大到小的重排,而缺失值總是會排在資料的最後端。

所謂 缺失值 就是資料中缺失的資料,通常缺失資料會顯示 NA ,在R語言中,缺失資料通常很難處理,因為它不同於前面所說的資料形態。

而且我們看到

NA==NA

https://ithelp.ithome.com.tw/upload/images/20200810/20124935WP9dED4xXw.png
這是相當弔詭的事情,我們也可以透過 class 這個函數去查看它的資料形態。

像是

class(pi)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935LyRk4Q247F.png

是數值資料。

class(TRUE)

https://ithelp.ithome.com.tw/upload/images/20200810/2012493578KLjk4LYK.png
是邏輯資料。

NA 到底是何種資料呢?

class(NA)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935H8I4xGinsE.png
這邊看到它是邏輯資料,但是如果我們拿NA去跟數值做一些運算,會發現一些有趣的事情。

NA+5

https://ithelp.ithome.com.tw/upload/images/20200810/20124935mQ13w6A36S.png

NA>5

https://ithelp.ithome.com.tw/upload/images/20200810/20124935f4kJx9Zscy.png
上面兩個結果雖然都是NA,但是如果用資料形態去看它。

class(NA+5)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935S9MKusEI7u.png

class(NA>5)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935HpgG70gXGb.png
卻是不同的結果,很弔詭吧?而事實上缺失值的處理一直是資料分析中的一門學問,在這邊我們先用一個簡單的語法來判斷資料是否為缺失值:

is.na(NA)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935IR5h3z2f1m.png

is.na(NA>6)

https://ithelp.ithome.com.tw/upload/images/20200810/20124935WvFV0c4qrZ.png
若為缺失值,則會顯示TRUE,不是則FALSE。

下一篇文章會繼續針對 dplyr 的其他函數做討論,這篇文章就先介紹到這,謝謝大家。


尚未有邦友留言

立即登入留言