---
# System prepended metadata

title: R 統計摘要教學

---

以下是完整的步驟，從資料讀取到摘要計算，並合併題目描述後保存為 Excel 檔案的整個流程：

# 1. 安裝並載入必要套件
在 R 中安裝並載入處理數據和 Excel 的套件：
```r
install.packages("readxl")
install.packages("dplyr")
install.packages("openxlsx")

library(readxl)
library(dplyr)
library(openxlsx)
```

# 2. 讀取資料
從 Excel 文件中讀取 CY08MSP_CODEBOOK 和 TAP_SCH_2022_QQQ 兩個工作表：
```r
# 設定檔案路徑
file_path <- "C:/Users/user/Downloads/test/TAP_SCH_2022_QQQ_combined.xlsx"

# 讀取 CY08MSP_CODEBOOK 工作表（包含 NAME 和 VARLABEL）
codebook <- read_excel(file_path, sheet = "CY08MSP_CODEBOOK")

# 讀取 TAP_SCH_2022_QQQ 工作表（包含題目數據）
data <- read_excel(file_path, sheet = "TAP_SCH_2022_QQQ")

```

# 3. 提取對應數據
根據 CY08MSP_CODEBOOK 中的 NAME 欄位，提取 TAP_SCH_2022_QQQ 中的數據：
```r
# 提取 codebook 中的欄位名稱
selected_columns <- unique(codebook$NAME)

# 從 TAP_SCH_2022_QQQ 中選擇匹配的欄位
filtered_data <- data %>%
  select(all_of(selected_columns))

```

# 4. 計算摘要統計
對提取的數據進行摘要計算（如回答次數、平均值、最小值和最大值）：
```r
# 確保數據為數字類型
filtered_data <- filtered_data %>%
  mutate(across(everything(), as.numeric))

# 移除全是 NA 的欄位
filtered_data <- filtered_data %>%
  select(where(~ any(!is.na(.))))

# 計算摘要統計
summary_data <- filtered_data %>%
  summarise(across(
    everything(),
    list(
      Count = ~ sum(!is.na(.)),
      Mean = ~ mean(.x, na.rm = TRUE),
      Min = ~ min(.x, na.rm = TRUE),
      Max = ~ max(.x, na.rm = TRUE)
    ),
    .names = "{col}_{fn}"
  ))

```

# 5. 合併題目描述
將摘要結果與 CY08MSP_CODEBOOK 中的 VARLABEL 合併，並調整欄位順序將 VARLABEL 放在 NAME 旁邊：
```r
# 將摘要結果轉換為長格式
summary_long <- summary_data %>%
  pivot_longer(cols = everything(), names_to = c("NAME", ".value"), names_sep = "_")

# 合併題目描述
final_summary <- left_join(summary_long, codebook, by = "NAME")

# 調整欄位順序，將 VARLABEL 放在 NAME 旁邊
final_summary <- final_summary %>%
  relocate(VARLABEL, .after = NAME)

```

# 6. 保存結果到 Excel
將合併後的結果保存為新的 Excel 文件：
```r
# 設定輸出檔案路徑
output_path <- "C:/Users/user/Downloads/test/final_summary_with_labels.xlsx"

# 保存到 Excel 文件
write.xlsx(final_summary, output_path, rowNames = FALSE)

# 提示完成
cat("最終摘要結果已成功保存至：", output_path, "\n")

```