นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
Network
Members · Following: 0 · Followed: 16

อ่าน: 1757
ความเห็น: 0

ก้าวย่าง ทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: ถามมา ตอบไป เรื่องของ R

ถามมาตอบไป

บันทึกนี้ขอเขียนแบบง่ายๆ ก็แล้วกันนะครับ เอาเป็นเรื่องของการ ถาม-ตอบแบบคอลัมน์ของ "ศิราณี" ทุกปัญหามีคำตอบ

ผมได้รับเมล์ฉบับหนึ่งความว่า:

> ... เป็นนักศึกษาป.โท อาชีวเวชศาสตร์ค่ะ ต้องการสอบถามอาจารย์ว่า
>  ถ้าต้องการใช้ R ในการรวม 3
> ไฟล์นี้ด้วยกันดังไฟล์แนบต้องใช้คำสั่งต่อไปนี้ใช่หรือไม่ค่ะ
> library(epid)
> clean()
> setwd()
> ass.1<-fread("ass1.csv")
> ass.2<-fread("ass2.csv")
> ass.3<-fread("ass3.csv")
> และขอสอบถามว่า ถ้าต้องการใช้โปรแกรม R, Export file
> ที่รวมแล้วและตั้งชื่อว่า "full1.csv"
> ต้องใช้คำสั่งอะไรค่ะ
>
> รบกวนสอบถามอาจารย์ด้วยค่ะ

ตอบ:


การรวมไฟล์เข้าด้วยกันนั้นต้องระบุว่าจะเป็นการรวมอย่างไร ระหว่าง

  • การรวมไฟล์เพื่อเพิ่มจำนวนชุดข้อมูลหรือเป็นการเพิ่มระเบียนของชุดข้อมูลหรือเพิ่มจำนวนแถว เช่น แบ่งแบบสอบถามกันไปป้อนข้อมูลแล้วนำมารวมกัน
  • การรวมไฟล์เพื่อเพิ่มตัวแปร หรือเพิ่มสดมภ์ เช่น เก็บข้อมูลตัวแปรอื่นๆ จากคนเดิมเพิ่มเติม แล้วนำมารวมกับข้อมูลอื่นๆ ที่เก็บไว้ก่อนหน้านี้แล้ว

จากข้อมูลที่แนบมาผมเดาเอาว่าเป็นการรวมไฟล์เพื่อวัตถุประสงค์แบบที่ ๒ คือเพิ่มจำนวนสดมภ์ (เพิ่มตัวแปร)

  • คำสั่ง library(epid) เป็นการเรียกใช้งานคำสั่งในชุดโปรแกรม epid
  • คำสั่ง clean() เป็นคำสั่งล้างข้อมูลใน work space ของ (โปรแกรม R) เราออกให้หมด หากเริ่ม (ใช้โปรแกรม R) ใหม่ๆ สดๆ ซิงๆ คำสั่งนี้ก็อาจจะไม่จำเป็นต้องใช้ เนื่องจากยังไม่มีข้อมูลอะไรใน Work space (พื้นที่ทำงาน/ สภาพแวดล้อม) ของโปรแกรม R
  • คำสั่ง setwd() เป็นคำสั่งที่ตั้งค่าไดเรคทอรีทำงานหรือตั้งค่าการค้นหาไฟล์ไปยังไดเรคทอรีที่ระบุ ดังนั้นภายในวงเล็บต้องระบุ path หรือตำแหน่งของไดเรคทอรี (โฟลเดอร์) ที่ต้องการไว้ในวงเล็บด้วย เช่น setwd("c:/mydata")
  • คำสั่ง ass.1 <- fread("ass1.csv") และอีก ๒ คำสั่งที่เหลือนั้น เป็นการเรียกข้อมูลจากแฟ้มข้อมูล ass1.csv, ass2.csv และ ass3.csv มาเก็บไว้ในวัตถุชื่อ ass.1, ass.2 และ ass.3 ใน R work space เท่านั้น วัตถุแต่ละวัตถุ (ass.1, ass.2, ass.3) อยู่เป็นอิสระจากกันไม่ได้รวมกันแต่อย่างใด
  • ผมแนะนำให้ใช้คำสั่ง read.csv() แทน fread()
  • read.csv() เป็นคำสั่งใน package foreign กันเหนียวก็ให้เรียก library  foreign (library(foreign)) ขึ้นมาก่อนใช้คำสั่ง read.csv() และ library foreign ติดตั้งมาพร้อมกับการติดตั้งโปรแกรม R โดยอัตโนมัติแล้ว
  • ตัวอย่างการใช้คำสั่ง read.csv() คือ ass.1 < read.csv("ass1.csv")
  • รวมข้อมูลในวัตถุต่างๆ เข้าด้วยกันโดยเป็นการรวมทางสดมภ์ ใน R ใช้คำสั่ง cbind()
  • ตัวอย่างการใช้คำสั่ง cbind() รวมข้อมูลจากวัตถุต่างๆ มาเก็บไว้ในวัตถุที่ชื่อ totala เช่น totala <- cbind(a1, a2, a3)
  • ต้องการเขียนข้อมูลที่รวมเข้าด้วยกันแล้ว (ที่เก็บในวัตถุ totala) กลับมาเป็นไฟล์ .csv ให้ใช้คำสั่ง write.csv() จาก library foreign
  • ตัวอย่างคำสั่ง write.csv() เช่น write.csv(totala, "c:\mydata\totala.csv)


คำสั่งทั้งหมดจึงเป็น

library(foreign)
setwd("c:/mydata")
ass.1 <- read.csv("ass1.csv")
ass.2 <- read.csv("ass2.csv")
ass.3 <- read.csv("ass3.csv")
totala <- cbind(ass.1, ass.2, ass.3)
write.csv(totala, "c:/mydata/totala.csv")

-----------------------------------------------------------------------------

ในกรณีของนักศึกษา ที่ต้องการบันทึกข้อมูลที่รวมข้อมูลเข้าด้วยกันแล้วเก็บไว้ในแฟ้มข้อมูลที่ชื่อ full1.csv ก็ให้เปลี่ยนชื่อแฟ้มข้อมูลจาก totala.csv เป็น full1.csv

write.csv(totala, "c:/mydata/full1.csv")

ข้อมูลเพิ่มเติมสำหรับท่านผู้อ่านนะครับ:

ชุดคำสั่ง epid เป็นชุดคำสั่งของโปรแกรม R ที่พัฒนาโดย รศ.นพ. หัชชา ศรีปรั่ง หน่วยระบาดวิทยา คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์

แนวคิดของชุดคำสั่ง epid คือรวมรวมคำสั่งต่างๆที่ใช้สำหรับการวิเคราะห์ข้อมูลทางระบาดวิทยา โดยให้ชุดคำสั่งคล้ายๆ กับชุดคำสั่งของโปรแกรม Stata มากที่สุด เนื่องจากฐานเดิมของโปรแกรมวิเคราะห์ข้อมูลทางระบาดวิทยา (สถิติ) เดิมนั้นหน่วยระบาดวิทยาฯ ซื้อลิขสิทธิ์โปแกรม Stata 7.0 มาใช้

หรืออีกนัยหนึ่งเพื่อทำให้ชุดคำสั่งของโปรแกรม R มีความเป็นภาษามนุษย์มากที่สุด

ชุดคำสั่ง epid ไม่รวมอยู่ใน contribute ของโปรแกรม R (package/ ชุดคำสั่งที่มีผู้พัฒนาและส่งไปให้กับทีมพัฒนาหลักของโปรแกรม R ตรวจสอบและบรรจุไว้ในรายการของชุดคำสั่งเสริมของโปรแกรม R) หากต้องการใช้งานต้อง download จากเวปไซต์ r-ice-project ครับ (ice - Integrated Computing Environment for R)

ข้อควรระวัง:

ข้อควรระวังของการใช้คำสั่งข้างต้น (cbind()) นั้น คำสั่งข้างต้นจะไม่มีการระบุว่าในการที่จะรวมข้อมูลเข้าด้วยกันนั้นมีตัวแปรใดหรือ field ใดที่เป็นตัวแปรที่ระบุว่าข้อมูลแต่ละระเบียน/ แถว (record) ที่นำมาต่อทางด้านขวามือหรือเพิ่มสดมภ์นั้น เป็นข้อมูลของ คน/object เดียวกัน

ดังนั้นข้อมูลที่นำมารวมกันต้องถูกจัดเรียงตามลำดับก่อนหลังเพื่อให้เป็นข้อมูลของคนๆ เดียวกัน หรือ object/ observation เดียวกันเสียก่อนที่จะใช้คำสั่ง cbind() เพื่อรวมข้อมูลเข้าด้วยกัน

หลังจากการรวมข้อมูลแล้ว (อาจจะ) ตัวแปร/ field ที่มีชื่อและบรรจุด้วยข้อมูลเดียวกัน ซ้ำกันอยู่ในวัตถุ/ แฟ้มข้อมูลที่เกิดจากการรวมข้อมมูลโดยใช้คำสั่ง cbind() เช่นตัวแปร/ field ID หรืออื่นๆ

ข้อแนะนำเพิ่มเติม:

หากต้องการหลีกเลี่ยงปัญหาข้างต้นแนะนำให้เปลี่ยนไปใช้คำสั่ง merge() แทนคำสั่ง cbind() แต่คำสั่ง merge() จะใช้รวมข้อมูลได้ครั้งละ ๑ คู่เท่านั้นหรือ ครั้งละ ๒ แฟ้มข้อมูล/ วัตถุ คำสั่ง merge() สามารถที่จะระบุตัวแปรหรือ field ร่วมที่เป็นข้อมูลระบุว่าข้อมูลชุดใด (แถว/ ระเบียน/ record ใด) เป็นข้อมูลชุดเดียวกันเช่นใช้ตัวแปร/ field id เป็นตัวระบุข้อมูล

คำสั่งจึงเป็น

merge(data1, data2, by="id")

เราเอง

หมวดหมู่บันทึก: บริการวิชาการ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 11 พฤษภาคม 2555 00:58 แก้ไข: 11 พฤษภาคม 2555 01:17 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 Ikkyu, Ico24 ServiceMan, และ 3 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

ไม่มีความเห็น

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 34.231.21.83
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ