--- GA: UA-159972578-2 --- ###### tags: `R` `googlesheets4` `API` # googlesheets4 套件使用介紹 此套件最初版本為`googlesheets`(已無法使用),更新後改名為`googlesheets4`。 數字取名為4是根據其使用的Sheets API的版本(目前4為最新)。 Reference: [Github](https://github.com/tidyverse/googlesheets4) ## 1. 取得表單資訊 ```{r} library(googlesheets4) library(googledrive) drive_find(type = "spreadsheet") %>% View() # 查看帳戶底下所有表單 ``` ## 2. 選擇表單 三種方式連接表單API: + 使用表單URL + 使用表單ID + 使用表單標題 ### 2.1 使用表單URL 通常不建議直接使用URL,因為網址太長會使code看起來很髒。 ```{r} read_sheet("https://docs.google.com/spreadsheets/d/1ZFxfmjlRl_kOZbwTCsAqK7sKhahh7SCnbFi-YLxUZ60/edit") ``` ### 2.2 使用表單ID(推薦) <b>ID從哪獲取?</b> + 使用drive_find()可以取得所有表單的ID + 使用as_sheets_id()自動將URL轉換成表單的ID + 自行從URL擷取`SPREADSHEET_ID`,其pattern為:`https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=SHEET_ID` ```{r} # 直接輸入Spread Sheet ID read_sheet("1ZFxfmjlRl_kOZbwTCsAqK7sKhahh7SCnbFi-YLxUZ60") # 使用as_sheets_id()轉換 ssid = as_sheets_id("https://docs.google.com/spreadsheets/d/1ZFxfmjlRl_kOZbwTCsAqK7sKhahh7SCnbFi-YLxUZ60/edit#gid=127301525") read_sheet(ssid) ``` ### 2.3 使用表單標題 使用drive_get()自動轉換為表單ID (目前測試沒有成功過,我使用Mac) ```{r} drive_get("2019BAR期初問卷 (回應)") read_sheet("1ZFxfmjlRl_kOZbwTCsAqK7sKhahh7SCnbFi-YLxUZ60") ``` ## 3. 【範例】開始統計表單內容 任務說明: 1. 統計選修2019BAR課程的學生投票作為助教時間的時段 2. 將學生分組,並均勻分配各個年級、程式語言的程度 ### Step1. 存取表單 由於表單的欄位名稱是提問,將其縮短並翻譯成英文以便coding ```{r} S = read_sheet(ssid) %>% setNames(c('time','name','id','dept','status', # 可以重新命名欄位 'r','morning','afternoon','evening')) ``` ### Step2. 資料清理 助教時間的選擇分為以下(5*3=15)個時段: + 週一至週五 (對應觀察值`星期一`~`星期五`) + 早/午/晚 (對應變數`morning`, `afternoon`, `evening`) 表單回應長相: ``` # A tibble: 66 x 3 morning afternoon evening <chr> <chr> <chr> 1 星期二, 星期三, 星期四, 星期五 星期一, 星期二, 星期四 星期三 2 星期二, 星期三, 星期五 星期二, 星期三 NA 3 星期二, 星期三 星期二, 星期四 星期二, 星期三, 星期四 4 星期二, 星期四 星期四 星期二, 星期三 5 星期六, 星期天 星期二, 星期六, 星期天 星期一, 星期二, 星期四, 星期五, 星期六, 星期天 ... ... ... ``` 將資料整理成一個統計表 ```{r} sapply(Q[7:9], function(v){strsplit(v, ', ') %>% unlist %>% table}) %>% {.[c(1,3,2,6,4:5,7),]} # 重新按照星期順序排列 ``` ``` morning afternoon evening 星期一 28 30 30 星期二 46 41 28 星期三 33 29 54 星期四 33 46 30 星期五 27 23 17 星期六 16 19 16 星期天 15 18 16 ``` ~任務1達成~ ### Step3. 開始分析 確認修課人的系所/學制/選課狀態/R語言程度的分佈 ```{r} # 系所 substr(Q$dept,1,2) %>% table %>% sort %>% data.frame # 學制(根據學號開頭字母) substr(Q$id,1,1) %>% table %>% sort %>% data.frame # 選課狀態 table(Q$status) # 是否會R table(Q$r) ``` ``` [1] . Freq 1 EM 1 2 企研 1 3 企醫 1 4 公事 1 5 經濟 1 6 行傳 1 7 資工 1 8 醫管 1 9 中文 2 10 亞太 2 11 人管 3 12 政經 6 13 財管 6 14 資管 8 15 企管 31 [2] . Freq 1 D 1 2 I 1 3 J 1 4 N 2 5 B 23 6 M 38 [3] 尚未選上、很想要加選 已經選上、但可能要退選 已經選上、打算修這門課 15 1 50 [4] False True 49 15 ``` 隨機分組:一組8人,分10組 ```{r} g = replicate(8, sample(1:10)) %>% as.vector # 隨機分配1~10的數字,重複8次 Q = Q %>% arrange(desc(r), desc(id)) # 會寫r的排最前面 Q$group = g[1:nrow(Q)] # 隨機分組,一組至少有1個會寫r(因為都排在前面了) ``` ``` False True 1 5 2 2 6 0 3 4 2 4 6 1 5 4 2 6 5 2 7 5 1 8 5 2 9 5 2 10 6 1 ``` 檢查分組是否夠隨機 ```{r} table(Q$group,Q$r) # 查看每組會寫r的人是否均勻分配 table(Q$group,substr(Q$id,1,1)) # 查看每組大學部/碩士班/國際生/在職生等比例 ``` ``` B D I J M N 1 3 1 0 0 3 0 2 1 0 0 0 5 0 3 2 0 0 0 4 0 4 3 0 1 0 3 0 5 2 0 0 0 4 0 6 2 0 0 1 4 0 7 2 0 0 0 2 2 8 3 0 0 0 4 0 9 3 0 0 0 4 0 10 2 0 0 0 5 0 ``` ~任務2達成~