Written by Siwasit Jitpanu 11/11/2021
เพื่อนๆเคยไหมทำโปรแกรม R สรุปข้อมูลเสร็จแล้ว แล้วต้องเปิด Excel มาจัดรูปแบบ Fonts รูปแบบตาราง(Style) หรือไฮไลท์ข้อมูลตามเงื่อนไข(Conditional Formatting) อีกครั้ง
หากเพื่อนติดปัญหานี้อยู่ โปรแกรม R ก็สามารถ เทสี เปลี่ยน Fonts เพิ่มเส้นกรอบ ได้เหมือนกันนะ ในวันนี้เราจะมาแนะนำการใช้โปรแกรม R ตกแต่งตารางข้อมูล และใส่ Conditional Formatting ให้สมบูรณ์พร้อมใช้งาน
ถ้าพร้อมแล้ว ลองทำตาม กันเลย
เพื่อนๆ สามารถเข้าไปดูวิธีติดตั้ง และเรียกใช้งาน Package ได้ที่นี่ คลิก
คำสั่งสำหรับติดตั้ง Package แบบตรวจสอบก่อนว่าติดตั้ง Package นั้นๆแล้วหรือยัง
if(!require('tidyr'))install.packages('tidyr')
if(!require('dplyr'))install.packages('dplyr')
if(!require('openxlsx'))install.packages('openxlsx',dependencies=TRUE)
if(!require('reshape2'))install.packages('reshape2')
if(!require('janitor'))install.packages('janitor’)
(Tip : การใช้คำสั่งลักษณะนี้ทำให้สามารถนำ Code ที่เขียนไป Run เครื่องที่ยังไม่เคยติดตั้ง Package ได้เลย)
คำสั่งเรียกใช้งาน Package
library(tidyr)
library(dplyr)
library(openxlsx)
library(reshape2)
library(janitor)
ข้อมูลผู้เสียชีวิตจากอุบัติเหตุทางถนน จากระบบบูรณาการข้อมูลการตายจากอุบัติเหตุทางถนน (3 ฐาน)
สามารถ Donwload และดูรายละเอียดของข้อมูลเพิ่มเติม ได้ที่ https://data.go.th/dataset/rtddi
createStyle(fontName='Calibri',fontSize=11,fontColour='#000000',border='TopBottomLeftRight',bgFill='#FFFFFF',fgFill='#FFFFFF',halign='center',valign='center')
1. fontName คือ ชื่อ Font ที่ใช้
2. fontSize คือ ขนาดของ Font
3. fontColour คือ สีของ Font โดยใช้เป็น Hex Color Codes
4. border คือ เส้นขอบของ Cell
5. bgFill และ fgFill คือ สีพื้นหลังของ Cell *** โดยใช้เป็น Hex Color Codes
6. halign คือ จัดข้อมูลในเซล ให้อยู่ชิดซ้าย ,กลาง และชิดขวา
7. valign คือ จัดข้อมูลในเซล ให้อยู่ชิดบน ,กลาง และชิดล่าง
8. textDecoration คือ รูปแบบของ Font
*** bgFill และ fgFill จะถูกใช้โดยคำสั่งคนละคำสั่ง คือ
bgFill จะใช้กับคำสั่ง conditionalFormatting
fgFill จะใช้กับคำสั่ง addStyle
ปล. หากใช้ผิดจะไม่เห็นสีใน Cell
ปล. คำสั่งย่อยใน createStyle ยังมีอีกหลายอย่าง เพื่อนๆสามารถดูรายละเอียดได้โดยพิมพ์คำสั่ง ?createStyle
addStyle(wb,'Sheet',cols=1:nc,rows=1:nr,style=Style,gridExpand=TRUE,stack=TRUE)
1. wb คือ Workbook ที่สร้างไว้
2. 'Sheet' คือ ชื่อ Sheet ใน Workbook ที่จะเพิ่มรูปแบบ
3. cols คือ ขอบเขตของ Column ที่จะเพิ่มรูปแบบ
4. rows คือ ขอบเขตของ Row ที่จะเพิ่มรูปแบบ
5. style คือ รูปแบบที่สร้างไว้จากคำสั่ง createStyle
6. stack คือ การเพิ่มรูปแบบเข้าไปในรูปแบบเก่าที่มีอยู่แล้ว
ปล. stack ใช้ในกรณี Cell เก่ามี Stlye อยู่แล้วต้องการเพียงแค่เปลี่ยน หรือทับแค่บางอย่าง เช่น Cell เก่ามี Style สีพื้นหลัง Style ใหม่กำหนดแค่ตัวหนา หาก stack เป็น TRUE Cell นั้นจะพื้นหลังเดิมเพิ่มตัวหนา หาก stack เป็น FALSE Cell นั้นจะไม่มีพื้นหลัง และตัวหนา
conditionalFormatting(wb,'Sheet',cols=1:nc,rows=1:nr,rule='==0',style=Style,stack=TRUE)
1. wb คือ Workbook ที่สร้างไว้
2. 'Sheet' คือ ชื่อ Sheet ใน Workbook ที่จะเพิ่มรูปแบบ
3. cols คือ ขอบเขตของ Column ที่จะเพิ่มรูปแบบ
4. rows คือ ขอบเขตของ Row ที่จะเพิ่มรูปแบบ
5 .rule คือ รูปแบบของเงื่อนไข Conditional Formatting
6. style คือ รูปแบบที่สร้างไว้จากคำสั่ง createStyle
7. stack คือ การเพิ่มรูปแบบเข้าไปในรูปแบบเก่าที่มีอยู่แล้ว
ปล. stack ใช้ในกรณี Cell เก่ามี Stlye อยู่แล้วต้องการเพียงแค่เปลี่ยน หรือทับแค่บางอย่าง เช่น Cell เก่ามี Style สีพื้นหลัง Style ใหม่กำหนดแค่ตัวหนา หาก stack เป็น TRUE Cell นั้นจะพื้นหลังเดิมเพิ่มตัวหนา หาก stack เป็น FALSE Cell นั้นจะไม่มีพื้นหลัง และตัวหนา
เราจะใช้ข้อมูลจาก EP : Pivot Table in R
สามารถ Copy CODE คำสั่ง ด้านล่างได้เลย (กด Expand ทางด้านขวามือ)
#ล้างค่าตัวแปรทังหมด
rm(list = ls())
#คำสั่งสำหรับ ตรวจสอบเพื่อ Install Package
if (!require('tidyr')) install.packages('tidyr')
if (!require('dplyr')) install.packages('dplyr')
if (!require('openxlsx')) install.packages('openxlsx', dependencies = TRUE)
if (!require('reshape2')) install.packages('reshape2')
if (!require('janitor')) install.packages('janitor')
#คำสั่งเรียกใช้งาน Package
library(tidyr)
library(dplyr)
library(openxlsx)
library(reshape2)
library(janitor)
#ข้อมูลที่ใช้
df <- read.xlsx('https://data.go.th/dataset/f5804870-7dc2-42df-86f3-769d6cc2ae23/resource/be60ddda-66cf-4d62-8815-63eb5941921a/download/tbl_rtddi_for_opendata.xlsx',detectDates = TRUE)
#เลือกข้อมูลเฉพาะบาง Column มาทำ Pivot Table
Data <- df%>%select(id,DEAD_YEAR,Vehicle,AccProv)
#เลือกข้อมูลเฉพาะบาง Row (Filter เฉพาะ กรุงเทพมหานคร)
Data <- Data%>%filter(AccProv=='กรุงเทพมหานคร')
#คำสั่งสำหรับสร้าง Pivot Table
Final_Data <- dcast(Data,Vehicle~DEAD_YEAR,fun=length,value.var='id')
#คำสั่งสำหรับเพิ่ม Total (Column) จาก Pivot Table ที่สร้างไว้
Final_Data_Total<-Final_Data%>%adorn_totals('col')
#เรียงข้อมูล
Final_Data_Total<-Final_Data_Total[order(Final_Data_Total$Total,decreasing=TRUE),]
#คำสั่งสำหรับเพิ่ม Total (Row) จาก Pivot Table ที่สร้างไว้
Final_Data_Total<-Final_Data_Total%>%adorn_totals('row')
#Export ข้อมูล
write.xlsx(Final_Data_Total,file=paste0(as.character(as.numeric(format(Sys.Date(),format='%Y'))+543),as.character(format(Sys.Date(),format='%m%d')),'_ข้อมูลผู้เสียชีวิตจากอุบัติเหตุทางถนน.xlsx'),overwrite=TRUE)
สร้าง Style สำหรับเพิ่มลงในตาราง
#Style 1 (BodyStyle) : สำหรับตารางข้อมูล
BodyStyle<-createStyle(fontName='TH SarabunPSK',fontSize=18,border='TopBottomLeftRight',halign='center')
#Style 2 (HeaderStyle) : สำหรับหัวตาราง
HeaderStyle<-createStyle(textDecoration='bold',fgFill='#D9E1F2’)
#Style 3 (ConStyle) : สำหรับ Conditional Formatting
ConStyle<-createStyle(fontName='TH SarabunPSK',fontSize=18,fontColour='#1F497D',bgFill='#D8E4BC')
STEP 1 : เพิ่ม Style 1 (BodyStyle) ใน Cell A1:M12
เพิ่ม Style 1 เราจะใช้คำสั่ง addStyle
addStyle(wb,'Summary',cols=1:ncol(Final_Data_Total),rows=1:(nrow(Final_Data_Total)+1),style=BodyStyle,gridExpand=TRUE)
STEP 2 : เพิ่ม Style 2 (HeaderStyle) ใน Cell A1:M1
เพิ่ม Style 2 เราจะใช้คำสั่ง addStyle
addStyle(wb,'Summary',cols=1:ncol(Final_Data_Total),rows=1,style=HeaderStyle,stack=TRUE)
STEP 3 : เพิ่ม Conditional Formatting (=0) Style 3 (ConStyle) ใน Cell B2:M12 และตั้งค่าความกว้าง Culumn A
เราจะใช้คำสั่ง conditionalFormatting
conditionalFormatting(wb,'Summary',cols=2:ncol(Final_Data_Total),rows=2:(nrow(Final_Data_Total)+1),rule='==0',style=ConStyle,stack=TRUE)
ปรับขนาดความกว้าง Column
setColWidths(wb,'Summary',cols=c(1),widths=24)
เพียงเท่านี้เราก็จะได้ไฟล์ Excel ที่จัดรูปแบบตามต้องการและ กำหนด Conditional Formatting ไว้ด้วย
(กด Expand ทางด้านขวามือ)
#Data_Report
#ล้างค่าตัวแปรทังหมด
rm(list = ls())
#คำสั่งสำหรับ ตรวจสอบเพื่อ Install Package
if (!require('tidyr')) install.packages('tidyr')
if (!require('dplyr')) install.packages('dplyr')
if (!require('openxlsx')) install.packages('openxlsx', dependencies = TRUE)
if (!require('reshape2')) install.packages('reshape2')
if (!require('janitor')) install.packages('janitor')
#คำสั่งเรียกใช้งาน Package
library(tidyr)
library(dplyr)
library(openxlsx)
library(reshape2)
library(janitor)
#ข้อมูลที่ใช้
df <- read.xlsx('https://data.go.th/dataset/f5804870-7dc2-42df-86f3-769d6cc2ae23/resource/be60ddda-66cf-4d62-8815-63eb5941921a/download/tbl_rtddi_for_opendata.xlsx',detectDates = TRUE)
#เลือกข้อมูลเฉพาะบาง Column มาทำ Pivot Table
Data <- df%>%select(id,DEAD_YEAR,Vehicle,AccProv)
#เลือกข้อมูลเฉพาะบาง Row (Filter เฉพาะ กรุงเทพมหานคร)
Data <- Data%>%filter(AccProv=='กรุงเทพมหานคร')
#คำสั่งสำหรับสร้าง Pivot Table
Final_Data <- dcast(Data,Vehicle~DEAD_YEAR,fun=length,value.var='id')
#คำสั่งสำหรับเพิ่ม Total (Column) จาก Pivot Table ที่สร้างไว้
Final_Data_Total<-Final_Data%>%adorn_totals('col')
#เรียงข้อมูล
Final_Data_Total<-Final_Data_Total[order(Final_Data_Total$Total,decreasing=TRUE),]
#คำสั่งสำหรับเพิ่ม Total (Row) จาก Pivot Table ที่สร้างไว้
Final_Data_Total<-Final_Data_Total%>%adorn_totals('row')
#Export ข้อมูล
saveWorkbook(wb,file=paste0(as.character(as.numeric(format(Sys.Date(),format='%Y'))+543),as.character(format(Sys.Date(),format='%m%d')),'_ข้อมูลผู้เสียชีวิตจากอุบัติเหตุทางถนน.xlsx'),overwrite=TRUE)
#--------------------------------------------------------------------------------------------
#Style & Conditional Formatting
#สร้าง Workbook
wb<-createWorkbook()
#เพิ่ม Sheets เปล่า
addWorksheet(wb,'Summary')
#เขียน Data ลงใน Sheets
writeData(wb,1,Final_Data_Total)
#CreateStyle
BodyStyle<-createStyle(fontName='TH SarabunPSK',fontSize=18,border='TopBottomLeftRight',halign='center')
HeaderStyle<-createStyle(textDecoration='bold',fgFill='#D9E1F2')
ConStyle<-createStyle(fontName='TH SarabunPSK',fontSize=18,fontColour='#1F497D',bgFill='#D8E4BC')
#Add Style Table
addStyle(wb,'Summary',cols=1:ncol(Final_Data_Total),rows=1:(nrow(Final_Data_Total)+1),style=BodyStyle,gridExpand=TRUE)
#Add Style Header
addStyle(wb,'Summary',cols=1:ncol(Final_Data_Total),rows=1,style=HeaderStyle,stack=TRUE)
#Add Conditional Formatting
conditionalFormatting(wb,'Summary',cols=2:ncol(Final_Data_Total),rows=2:(nrow(Final_Data_Total)+1),rule='==0',style=ConStyle,stack=TRUE)
#ปรับขนาดความกว้าง Column
setColWidths(wb,'Summary',cols=c(1),widths=24)
#Export
saveWorkbook(wb,file=paste0(as.character(as.numeric(format(Sys.Date(),format='%Y'))+543),as.character(format(Sys.Date(),format='%m%d')),'_ข้อมูลผู้เสียชีวิตจากอุบัติเหตุทางถนน.xlsx'),overwrite=TRUE)