Google 表單單選方格量表題匯出後:欄名很長、值不是數字,怎麼處理?
Google 表單裡最適合做量表題(Likert scale)的題型是「單選方格」。填答者看起來乾淨易懂——一次列好幾個子題、每個子題選一個答案:

但匯出到 Google Sheets 之後,會發現每個子題都變成一欄,欄名長成這樣:

資料會有一整排的「請評估下列工作特質對你的重要程度 [薪水]」——題目全文重複五次,只有中括號裡的子題不一樣。
這樣的資料有兩個問題
拿到這樣的 Sheet,通常會遇到兩件麻煩事:
- 欄名超長——樞紐分析、畫圖時,標籤擠成一團,X 軸、圖例都變得很難看
- 值是「5 非常重要」字串、不是數字——直接統計,例如算平均數,
=AVERAGE(...)會回傳 0 或錯誤,因為 Google Sheets 把整欄當成文字
要能算平均、畫長條圖,這兩件都得先處理。
用 Google Sheets 直接處理
步驟一:把欄名改成「工作特質_薪水」這種格式
按 Ctrl+H(Mac 是 Cmd+Shift+H)打開「尋找及取代」對話框,做兩次:
第一次——把問題題目全文換成短前綴:
- 尋找:
請評估下列工作特質對你的重要程度 [ - 取代為:
工作特質_ - 搜尋範圍:選「特定範圍」→ 填第一列的欄名區間,例如
B1:F1 - 按「全部取代」
第二次——把右邊的中括號拿掉:
- 尋找:
] - 取代為:留空
- 搜尋範圍:一樣
B1:F1
第一列的欄名就變成 工作特質_薪水、工作特質_彈性時間、工作特質_成就感、工作特質_同事關係、工作特質_學習機會。
為什麼取這種名字,不是直接叫「薪水」就好?
這是處理問卷資料的建議方法——題幹主題 + 底線 + 子題:
前綴保留脈絡:光看「薪水」不知道問的是重要程度、還是滿意度、還是月薪;
工作特質_薪水一看就懂多個矩陣題不會衝突:如果之後加另一題組「工作滿意度」,欄名就是 「
工作滿意度_薪水」——選欄位、篩選時,工作特質_是在問重要程度的題組,工作滿意度_ 就是在問滿意度的題組,一目了然中文直接讀:不用背
imp_salary、sat_salary這種英文縮寫
步驟二:把值轉成數字
Google Sheets 有 REGEXEXTRACT 函數,直接抓字串開頭的數字。在旁邊的空欄建一組新欄位(保留原欄可以查證):
假設「工作特質_薪水」欄在 B 欄、資料從第 2 列開始,在 H 欄第 2 列填:
=IF(B2="", "", VALUE(REGEXEXTRACT(B2, "^\d+")))
拖曳往下複製到全部資料列。其他四欄(彈性時間、成就感…)在 I、J、K、L 欄同樣做一次。
想要一個公式做完整欄,可以在 H2 用 ARRAYFORMULA:
=ARRAYFORMULA(IF(B2:B="", "", VALUE(REGEXEXTRACT(B2:B, "^\d+"))))
拉出來就是純數字:5、4、5、3、5……
Excel 用戶:Excel 365 也有 REGEXEXTRACT,用法一樣。舊版沒有的話,用 =VALUE(LEFT(B2, 1)) 抽第一個字——這招只適用 1–9 分量表。
步驟三:算描述統計、畫圖
值變成數字之後,就可以進行統計計算了:
- 平均:
=AVERAGE(H2:H6) - 標準差:
=STDEV(H2:H6) - 各分數的人數:
=COUNTIF(H2:H100, 5)
或者選整個數字區塊 → 選單「插入 → 圖表」,直接畫長條圖看子題平均:
=AVERAGE(H2:H100) # 工作特質_薪水 平均
=AVERAGE(I2:I100) # 工作特質_彈性時間 平均
...
把五個平均值選起來、插入長條圖,就有一張「哪個工作特質最被重視」的排行圖。
什麼時候值得改用 R
在Google Sheets 用公式處理,比較適合一次性、資料量不大的分析。若是以下情境可能就比較不方便:
- 資料量大:幾千筆以上,公式會卡;ARRAYFORMULA 也頂不住
- 要跑統計:例如 t 檢定、ANOVA、因素分析、信度分析(Cronbach’s α)等等
- 要重複跑很多次:每月、每季問卷收一批,同樣的清理流程要自動化
- 要交接、要寫報告:Sheets 的公式散在各格,六個月後回來找不到;R 腳本一份文件從頭跑到尾
底下的 R 做法沿用同一套命名——工作特質_子題。中文變數名 R 也可以處理。在R有很多方法可以處理,各人有各人的愛好,在此僅為一種示例的方法。
用 R 處理
先讀進來:
library(googlesheets4)
library(dplyr)
library(stringr)
df <- read_sheet("你的 Sheet URL")
names(df)
#> [1] "時間戳記"
#> [2] "請評估下列工作特質對你的重要程度 [薪水]"
#> [3] "請評估下列工作特質對你的重要程度 [彈性時間]"
#> [4] "請評估下列工作特質對你的重要程度 [成就感]"
#> [5] "請評估下列工作特質對你的重要程度 [同事關係]"
#> [6] "請評估下列工作特質對你的重要程度 [學習機會]"改欄名:一行 rename_with
rename_with() 搭配 str_extract() 抓中括號裡的子題名,再前綴加上「工作特質_」:
df <- df |>
rename_with(
~ paste0("工作特質_", str_extract(., "(?<=\\[).+(?=\\])")),
starts_with("請評估")
)
names(df)
#> [1] "時間戳記" "工作特質_薪水" "工作特質_彈性時間"
#> [4] "工作特質_成就感" "工作特質_同事關係" "工作特質_學習機會"starts_with("請評估") 只選這組欄,str_extract() 抓中括號裡的內容,paste0() 加前綴——一次完成,跟 Sheets 那邊的命名對得起來。
值轉數字
欄改好了,值還是字串:
df$`工作特質_薪水`
#> [1] "5 非常重要" "4 有點重要" "5 非常重要" "3 普通" "5 非常重要"用 readr::parse_number() 抓字串裡第一個數字:
library(readr)
df <- df |>
mutate(across(starts_with("工作特質_"), parse_number))
df$`工作特質_薪水`
#> [1] 5 4 5 3 5描述統計、畫圖
library(tidyr)
library(ggplot2)
df |>
summarise(across(starts_with("工作特質_"), \(x) mean(x, na.rm = TRUE))) |>
pivot_longer(everything(), names_to = "item", values_to = "mean") |>
mutate(item = str_remove(item, "^工作特質_")) |>
ggplot(aes(x = mean, y = reorder(item, mean))) +
geom_col() +
labs(x = "平均重要程度", y = NULL)
starts_with("工作特質_") 一次選出這組五欄;畫圖時把前綴拿掉,Y 軸標籤就是子題名。
相關
- 複選題資料的展開:複選題資料,一格塞了多個答案:Excel、Google 表單、R、Python 各自怎麼攤平?
- 複選題「其他」選項的表單設計:Google 表單複選題的「其他」選項,怎麼設計資料才好整理?
- 量表題怎麼分類(名目、順序、等距、比率):問卷設計 measurement scales 是什麼?