發表文章

目前顯示的是有「R」標籤的文章

【數據分析】R|時間格式處理|date format & lubridate

在R之中,我們有時會需要時間的轉換。常常抓到網路資料後,得到的timestamp欄位可能是char或是num的格式,這時候就可以採用內建的as.date或取用lubridate這個package。但在了解怎麼用後面的函數從字串中轉成時間前,得先知道什麼是標準的時間格式,才知道怎麼得到想要的結果。 標準時間格式 class為「POSIXlt」和「POSIXct」 ,包含資料的格式為" %Y-%m-%d %H:%M:%S "。 "年-月-日 時:分:秒" 在日期間以「-」區隔,時間以「:」區隔,兩者以一個空白分隔。 %m 小寫是月(month), %M 大寫是分(Minute) → 時間的格式都是大寫。 我們常用 Sys.time()或now() 來取得執行當下的時間點,可以得到標準格式 "2018-11-09 11:35:06 CST" 。 以我們台灣來講,CST = China Standard Time,也就是常聽到的 中原標準時間 ,是我們這個經度所位在的時區。相對於UTC地球標準時間要加上八小時。即為UTC+8。 UTC = Coordinated Universal Time是像秒一樣的公定標準,格林威治標準時間GMT = Greenwich Mean Time所在時區與該時間相同。 now()之中可以設定時區 → now(tzone = "UTC") 會得到比CST少8小時的結果。 而日期格式較為簡單, class為「Date」 ,取得當天日期則用Sys.Date()。 轉換為日期 首先先看日期的部分,實作上,常碰到的是三種狀況: 長相已經是標準日期(Ex: 2018-11-09),但型別為character 長相是數字(Ex: 17844),型別為numeric 各式長相的時間(Ex: "November 9, 2018"、"09/11/2018"),型別為character 面對這些該如何怎麼解決呢? 解決方法 :as.Date搭配format設定 [1] as.Date("2018-11-09")   →"2018/11/09"也...

【數據分析】R|擷取字串|RegEx與常用函數

圖片
在抓取資料或清理資料、Mutate整理Dataframe時,我們常常會需要擷取字串,舉凡辨識Email、檔案格式或副檔名(File Extension)、用字分析...等等,抑或最簡單的只想看出vector中含有某個詞彙的比率,各種情境都很常出現擷取或比對字串的需求。 擷取字串常用函數 而在這過程之中,勢必需要了解有哪些函數與方法來幫助解決問題。來看看常用的函數包含在哪些Package? base 內建之基礎套件 grep:設定要找的詞彙,列舉資料中存在該詞彙的位置(index)。 grep("pattern", vector) grepl:與grep一樣,但l代表logical,列舉之結果為T/F,有該pattern者為TRUE。 gsub:可以將pattern中( )所鎖定的subpattern再進一步抓出來,結果為( )中內容。 gsub("(sub)pattern", "\\1", vector) gsub("pattern", sentence, "substitution"),把字串中所有含pattern者依substitution做取代。gsub = global substitution strsplit:String Split,顧名思義將字串做分割(依據給的pattern)。 strsplit(sentence, "pattern") stringr 需另外載入之套件 str_detect:偵測到vector之字串中含有pattern者為TRUE str_detect(vector, "pattern") str_sub:自字串中,擷取設定之始末位置(index)之間的字串。subset of the string str_sub(string, start_index, end_index),末位置接受負值,代表倒數第幾個。 grepl vs. str_detect?   基本上,我認為grepl與str_detect沒有差異。個人在處理時較喜歡利用str_detect的方法判斷dataframe欄位是否有想要的pattern,直...