搜尋感興趣的網誌

所有文章連結

顯示具有 Forcats 標籤的文章。 顯示所有文章
顯示具有 Forcats 標籤的文章。 顯示所有文章

2022年3月30日 星期三

R Packages introduce - forcats | R包介紹 – forcats

 


Forcats包是專門處理因子的包,除了改變因子的級別排序外,也能處理因子的值,應用於數據處理時有時會比字符來的方便許多,製作成圖表時也較容易觀看,factor因子應該算是專屬R的特殊形態,關於因子的介紹可以點擊連結觀看介紹與一般操作 >> 點我觀看factor介紹

 

關於forcats包內的函數,依據介紹的會有以下三個 :

 

`fct_reorder()` : 透過另一個變量值進行重新排序

fct_reorder文章 >> 請點我

 

`fct_inorder()` : 依照出現頻率、數字順序等方式重新排列

fct_inorder文章 >> 請點我 


`fct_relevel()` : 手動進行排序

fct_relevel文章 >> 請點我 


 

forcats的函數結構上有一些相同的操作方式 :

1.      開頭都為fct_

2.      第一個參數為要處理的因子向量。

3.      支援pipes通道。

4.      接受傳入的向量是字符串,並且輸出時不會改變類型。

R Packages forcats - fct_relevel | R包forcats - fct_relevel

 


fct_relevel針對已因子的數據進行手動重新排序,排序可使用的函數也不少,就讓我們舉個例子操作排序的變化


基本語法

fct_relevel(dataset$var)


可用參數

after = 0 >> 將排序的因子放置的位置


建立數據框並設定為因子,初始轉換時可以設定級別levels,若沒有則依照字母進行排序

# 建立數據框
factor_df <- tibble(
    animal = c("dog", "cat", "rat", "fish", "lion")
    )

# 轉換為因子
factor_df <- factor(factor_df$animal, levels = c("dog", "cat", "rat", "fish", "lion"))

# 輸出結果
r$> factor_df [1] dog cat rat fish lion Levels: dog cat rat fish lion


進行基本排序 >> 依照字母排序

# 基本排序
fct_relevel(factor_df_v2)

# 輸出結果
r$> fct_relevel(factor_df_v2) [1] dog cat rat fish lion Levels: cat dog fish lion rat


進行排序 >> 將lion提前至第一順位,可編排其他的延伸下去

# lion設定為第一順位
fct_relevel(factor_df, "lion")

# 輸出結果
r$> fct_relevel(factor_df, "lion") [1] dog cat rat fish lion Levels: lion dog cat rat fish


# lion設定為第一順位,fish為第二
fct_relevel(factor_df, "rat", "fish")

# 輸出結果
r$> fct_relevel(factor_df, "rat", "fish") [1] dog cat rat fish lion Levels: rat fish dog cat lion


進行排序 >> 將cat擺放至第四位之後(也就是第五位)

# cat設定為第四位之後
fct_relevel(factor_df, "cat", after = 4)

# 輸出結果
r$> fct_relevel(factor_df, "cat", after = 4) [1] dog cat rat fish lion Levels: dog rat fish lion cat


進行其他參數排序 >> Inf設定為最後

# dog設定為最後
fct_relevel(factor_df, "dog", after = Inf)

# 輸出結果
r$> fct_relevel(factor_df, "dog", after = Inf) [1] dog cat rat fish lion Levels: cat rat fish lion dog


其他函數效果

# sort排序
fct_relevel(factor_df, sort)

# 輸出結果
r$> fct_relevel(factor_df, sort) [1] dog cat rat fish lion Levels: cat dog fish lion rat


# sample排序
fct_relevel(factor_df, sample)

# 輸出結果
r$> fct_relevel(factor_df, sample) [1] dog cat rat fish lion Levels: dog rat fish lion cat

R Packages forcats - fct_reorder | R包forcats - fct_reorder

 


fct_reorder的作用是通過另一個變量的值對應所需要重新排的變量值,解釋起來有點怪,我們還是透過實際例子進行


基本語法

fct_reorder(dataset$var, dataset$var, desc)


可用參數

desc : 預設為TRUE,要變更排序方式填入desc即可


建立一個數據框,包含數字與文字

factor_df <- tibble(
    number = c(10, 100, 50, 90, 20),
    float = c(1.1, 55.2, 35.1, 3.9, 120.5),
    animal = c("dog", "cat", "rat", "fish", "lion")
)

# 輸出結果
r$> factor_df # A tibble: 5 x 3 number float animal <dbl> <dbl> <chr> 1 10 1.1 dog 2 100 55.2 cat 3 50 35.1 rat 4 90 3.9 fish 5 20 120. lion


將animal欄位變更為因子

# 變更為因子
factor_df$animal <- as.factor(factor_df$animal)

# 輸出結果
r$> str(factor_df$animal) Factor w/ 5 levels "cat","dog","fish",..: 2 1 5 3 4


透過number欄位的值對animal欄位的順序做調整,依照number欄位的值10 < 20 < 50 < 90 < 100做排序

# 取number的值對animal做排序
fct_reorder(factor_df$animal, factor_df$number)

# 輸出結果
r$> fct_reorder(factor_df$animal, factor_df$number) [1] dog cat rat fish lion Levels: dog lion rat fish cat


加入desc重新排列

# 取number的值對animal做desc排序
fct_reorder(factor_df$animal, factor_df$number, desc)

# 輸出結果
r$> fct_reorder(factor_df$animal, factor_df$number, desc) [1] dog cat rat fish lion Levels: cat fish rat lion dog


不一定只能操作字符,也可以將number欄位變更為因子

# 將number欄位變更為因子
factor_df$number <- as.factor(factor_df$number)

# 輸出結果
r$> str(factor_df$number) Factor w/ 5 levels "10","20","50",..: 1 5 3 4 2


透過float欄位的值對number欄位進行排序

# 取float的值對number做排序
fct_reorder(factor_df$number, factor_df$float)

# 輸出結果
r$> fct_reorder(factor_df$number, factor_df$float) [1] 10 100 50 90 20 Levels: 10 90 50 100 20

R Packages forcats - fct_inorder | R包forcats - fct_inorder

 


fct_inorde算是一個系列,包含fct_inorder、fct_infreq、fct_insrq,差別在於排序的模式不同,除了修改排序外,並沒有甚麼其他組合方式,排序方式如 : 

fct_inorder : 按照第一次出現的順序

fct_infreq : 按照出現次數

fct_insrq : 按照級別的數值


基本語法

fct_inorder(dataset$var)

fct_infreq(dataset$var)

fct_insrq(dataset$var)


建立數據框包含數字與字元

# 建立數據框
factor_df <- tibble(
    letter = c("c", "b", "a", "a", "c", "a", "b", "a", "c", "b", "b"),
    number = c(1, 2, 3, 2, 1, 1, 1, 2, 3, 1, 1)
)

# 輸出結果
r$> factor_df # A tibble: 11 x 2 letter number <chr> <dbl> 1 c 1 2 b 2 3 a 3 4 a 2 5 c 1 6 a 1 7 b 1 8 a 2 9 c 3 10 b 1 11 b 1


以fct_inorder、infreq進行排序,函數接受字符作為輸入,所以可以不轉換為因子,以下為不轉換因子直接以字符輸入

# 不轉換因子直接輸入
fct_inorder(factor_df$letter)

# 輸出結果
r$> fct_inorder(factor_df$letter) [1] c b a a c a b a c b b Levels: c b a


# 不轉換因子直接輸入
fct_infreq(factor_df$letter)

r$> fct_infreq(factor_df$letter) [1] c b a a c a b a c b b Levels: a b c


轉換為因子後輸入,結果是一樣的

# 將欄位轉換為因子
factor_df$letter <- factor(factor_df$letter)


# 轉換因子後輸入
fct_inorder(factor_df$letter)

# 輸出結果
r$> fct_inorder(factor_df$letter) [1] c b a a c a b a c b b Levels: c b a


# 轉換因子後輸入
fct_infreq(factor_df$letter)

# 輸出結果
r$> fct_infreq(factor_df$letter) [1] c b a a c a b a c b b Levels: a b c


數字欄位進行就需要轉換為因子才能進行,否則會出現ERROR

# 不轉換因子直接輸入
fct_inseq(factor_df$number)

# 輸出結果
r$> fct_inseq(factor_df$number) Error: `f` must be a factor (or character vector).


# 進行轉換
factor_df$number <- factor(factor_df$number)

# 轉換因子後輸入
fct_inseq(factor_df$number)

# 輸出結果
r$> fct_inseq(factor_df$number) [1] 1 2 3 2 1 1 1 2 3 1 1 Levels: 1 2 3

2022年3月22日 星期二

數據分析R包介紹 | Data Analyze R Packages Introduce

 


在數據分析的領域,PythonR都有不少的擁護者,Python的通用性高,可以做網頁、人工智慧、APP、數據分析、甚至影響處理等等,R則是比較侷限,但是R在統計、繪圖的部分畢竟比較擅長,有些語法也顯得簡單,小雷整理了會常用到的Packages內容,除了希望能分享幫助到正在學習的朋友,也讓自己不斷的溫習,介紹的內容若是有錯誤,還希望大大能提點改進。

 

以下是常用的Packages,簡單做點介紹,各分類的文章連結也會寫好後陸續放上來,不定期進行更新,有在學習R語言的朋友可以當作參考。

 

Tidyverse包內已經整合的有(當然也可以單獨import) :

1.      Dplyr : 數據操作包,plur的進階版,很重要且基本的數據操作包,包含了數據的處理、轉換函數,算是很常會到的Packages

Dplyr文章連結 >> 請點我

 

2.      Readr : 數據集匯入包,tidyverse的核心包之一,用來匯入數據集,當然Rbase包中也有同樣的功能。

 

3.      Tidyr : 數據清洗包,分析的準確,很大的程度取決於數據的乾淨程度,一點點的誤差都有可能導致分析的失準。

 

4.      Forcats : 因子操作包,數據整理時,有時會因為欄位的型態而不好操作、排序,因子factor的轉換與使用有時會遠比字符character來的容易。

Forcats文章連結 >> 請點我

 

5.      Tibble : 在創立、列印、子集的顯示與傳統數據框data.frame不同,在使用tidyverse時幾乎都會產生tibbles框架。

 

6.      Purrr : 專門處理函數與向量,可以使編寫的代碼具有表現力與易於編程。

 

7.      Stringr : 專門處理字符character的包,讓處理字符時可以變得容易許多。

Stringr文章連結 >> 請點我

 

8.      Ggplot2 : 最常使用的繪圖包,擁有美觀與強大的繪圖功能,也很好的結合編程與繪圖

 

Lubridate : 日期操作包,分析時常常會使用到日期的欄位與數值,透過lubridate可以輕鬆的進行操作與轉換。

 

Stats : 統計包,這也是使愛用者喜愛的原因吧,強大的統計功能,很簡單的就可以把相關的數值找出來。

 

Janitor : 檢查與清理包,除了檢查數據之外,也提供清洗數據的其他函數。


其他文章

看看精選文章

納希克房價分析 | Nashik Apartment Price Analyze – 語法解析(上)

  這次 Nashik 的房價分析有上傳至 Kaggle ,有興趣的朋友可以前往閱覽, RMarkdown PDF 報告存放在 Google 雲端,程式碼則是存放於 Github ,照慣例會分享好用的函式語法,雖說基本的 Packages 與語法可能很多人都會完整的閱覽,但是實際...