บทช่วยสอน R: วิธีการนำเข้าข้อมูลไปยัง R

รับหนังสือฉบับสมบูรณ์
R เชิงปฏิบัติสำหรับการสื่อสารมวลชนและวารสารศาสตร์ MSRP $ 59.95 ดูมัน

บทความนี้คัดลอกมาจาก“ Practical R for Mass Communication and Journalism” โดยได้รับอนุญาตจากผู้จัดพิมพ์ © 2019 โดย Taylor & Francis Group, LLC.

ก่อนที่คุณจะสามารถวิเคราะห์และแสดงภาพข้อมูลได้คุณต้องนำข้อมูลนั้นไปไว้ใน R มีหลายวิธีในการดำเนินการนี้ขึ้นอยู่กับว่าข้อมูลของคุณถูกจัดรูปแบบอย่างไรและอยู่ที่ใด

โดยปกติฟังก์ชันที่คุณใช้ในการนำเข้าข้อมูลจะขึ้นอยู่กับรูปแบบไฟล์ของข้อมูล ตัวอย่างเช่นในฐาน R คุณสามารถนำเข้าไฟล์ CSV ด้วยไฟล์read.csv(). Hadley Wickham สร้างแพ็คเกจชื่อ readxl ซึ่งตามที่คุณคาดหวังมีฟังก์ชันอ่านในไฟล์ Excel มีแพ็คเกจอื่นคือ googlesheets สำหรับดึงข้อมูลจาก Google สเปรดชีต

แต่ถ้าไม่อยากจำทั้งหมดก็มี rio

ความมหัศจรรย์ของริโอ

“ จุดมุ่งหมายของ rio คือการทำให้ไฟล์ข้อมูล I / O [นำเข้า / เอาต์พุต] ใน R ให้ง่ายที่สุดเท่าที่จะทำได้โดยใช้ฟังก์ชันง่ายๆสามอย่างในสไตล์มีดของสวิส” ตามหน้า GitHub ของโครงการ ฟังก์ชั่นเหล่านี้คือimport(), และexport()convert()

ดังนั้นแพคเกจ rio import()มีเพียงหนึ่งฟังก์ชั่นในการอ่านในรูปแบบที่แตกต่างของไฟล์: หากคุณimport("myfile.csv")รู้จักใช้ฟังก์ชันเพื่ออ่านไฟล์ CSV import("myspreadsheet.xlsx")ทำงานในลักษณะเดียวกัน ในความเป็นจริง rio จัดการมากกว่าสองรูปแบบรวมถึงข้อมูลที่คั่นด้วยแท็บ (ที่มีนามสกุล. tsv), JSON, Stata และข้อมูลรูปแบบความกว้างคงที่ (.fwf)

แพ็คเกจที่จำเป็นสำหรับบทช่วยสอนนี้

  • ริโอ
  • htmltab
  • readxl
  • googlesheets
  • Pacman
  • ภารโรง
  • rmiscutils (pm GitHub) หรือ readr
  • แทะ

เมื่อคุณวิเคราะห์ข้อมูลของคุณแล้วหากคุณต้องการบันทึกผลลัพธ์เป็น CSV สเปรดชีต Excel หรือรูปแบบอื่น ๆexport()ฟังก์ชันของ rio สามารถจัดการได้

หากคุณยังไม่มีแพ็คเกจ rio ในระบบของคุณให้ติดตั้งทันทีด้วยinstall.packages("rio").

ฉันได้ตั้งค่าข้อมูลตัวอย่างด้วยข้อมูลปริมาณหิมะในฤดูหนาวของบอสตัน คุณสามารถไปที่ //bit.ly/BostonSnowfallCSV แล้วคลิกขวาเพื่อบันทึกไฟล์เป็น BostonWinterSnowfalls.csv ในไดเรกทอรีการทำงานของโครงการ R ปัจจุบันของคุณ แต่ประเด็นหนึ่งของการเขียนสคริปต์คือการแทนที่การทำงานด้วยตนเองซึ่งน่าเบื่อหน่ายหรืออย่างอื่นด้วยระบบอัตโนมัติที่ทำซ้ำได้ง่าย แทนที่จะคลิกเพื่อดาวน์โหลดคุณสามารถใช้download.fileฟังก์ชันR กับไวยากรณ์download.file("url", "destinationFileName.csv"):

download.file ("// bit.ly/BostonSnowfallCSV", "BostonWinterSnowfalls.csv")

สิ่งนี้ถือว่าระบบของคุณจะเปลี่ยนเส้นทางจากทางลัด URL ของ Bit.ly และค้นหา URL ของไฟล์จริงได้สำเร็จ //raw.githubusercontent.com/smach/NICAR15data/master/BostonWinterSnowfalls.csv บางครั้งฉันมีปัญหาในการเข้าถึงเนื้อหาเว็บบนพีซี Windows รุ่นเก่า หากคุณมีหนึ่งในลิงก์เหล่านี้และลิงก์ Bit.ly นี้ไม่ทำงานคุณสามารถสลับ URL จริงสำหรับลิงก์ Bit.ly อีกทางเลือกหนึ่งคือการอัปเกรดพีซี Windows ของคุณเป็น Windows 10 หากเป็นไปได้เพื่อดูว่าเป็นเคล็ดลับหรือไม่

หากคุณต้องการให้ rio นำเข้าข้อมูลโดยตรงจาก URL อันที่จริงก็ทำได้และฉันจะไปที่ส่วนถัดไป ประเด็นของส่วนนี้คือการฝึกฝนการทำงานกับไฟล์ในเครื่อง

เมื่อคุณมีไฟล์ทดสอบในระบบภายในของคุณคุณสามารถโหลดข้อมูลนั้นลงในวัตถุ R ที่เรียกว่า snowdata ด้วยรหัส:

snowdata <- rio :: import ("BostonWinterSnowfalls.csv")

โปรดทราบว่าเป็นไปได้ที่ rio จะขอให้คุณดาวน์โหลดไฟล์อีกครั้งในรูปแบบไบนารีซึ่งในกรณีนี้คุณจะต้องเรียกใช้

download.file ("// bit.ly/BostonSnowfallCSV", "BostonWinterSnowfalls.csv", mode = "wb")

อย่าลืมใช้ตัวเลือกการเติมแท็บของ RStudio หากคุณพิมพ์rio::และรอคุณจะเห็นรายการฟังก์ชันที่มีทั้งหมด พิมพ์snowและรอคุณจะเห็นชื่อเต็มของวัตถุของคุณเป็นตัวเลือก ใช้ปุ่มลูกศรขึ้นและลงเพื่อเลื่อนไปมาระหว่างคำแนะนำการเติมข้อความอัตโนมัติ เมื่อไฮไลต์ตัวเลือกที่คุณต้องการแล้วให้กดแป้น Tab (หรือ Enter) เพื่อเพิ่มวัตถุแบบเต็มหรือชื่อฟังก์ชันลงในสคริปต์ของคุณ

คุณควรเห็นวัตถุsnowdataปรากฏในแท็บสภาพแวดล้อมของคุณในบานหน้าต่างด้านขวาบนของ RStudio (หากบานหน้าต่างด้านขวาบนนั้นแสดงประวัติคำสั่งของคุณแทนสภาพแวดล้อมของคุณให้เลือกแท็บสภาพแวดล้อม)

กลุ่ม Taylor & Francis

snowdataควรแสดงให้เห็นว่ามี 76 "การสังเกตการณ์" - การสังเกตหรือแถวและตัวแปรหรือคอลัมน์สองตัว หากคุณคลิกที่ลูกศรทางด้านซ้ายของsnowdataเพื่อขยายรายชื่อคุณจะเห็นชื่อคอลัมน์สองคอลัมน์และประเภทของข้อมูลที่แต่ละคอลัมน์มีอยู่ Winterเป็นสตริงตัวอักษรและTotalคอลัมน์ที่เป็นตัวเลข คุณควรจะเห็นค่าสองสามค่าแรกของแต่ละคอลัมน์ในบานหน้าต่างสภาพแวดล้อม

กลุ่ม Taylor & Francis

คลิกที่คำsnowdataนั้นในแท็บสภาพแวดล้อมเพื่อดูข้อมูลของคุณในลักษณะคล้ายสเปรดชีตมากขึ้น คุณสามารถรับมุมมองเดียวกันนั้นได้จากคอนโซล R ด้วยคำสั่งView(snowdata)(ซึ่งจะต้องเป็นตัวพิมพ์ใหญ่ V บน View - viewจะไม่ทำงาน) หมายเหตุ: snowdataไม่อยู่ในเครื่องหมายคำพูดเนื่องจากคุณกำลังอ้างถึงชื่อของวัตถุ R ในสภาพแวดล้อมของคุณ ในrio::importคำสั่งก่อนBostonWinterSnowfalls.csv อยู่ในเครื่องหมายคำพูดเพราะนั่นไม่ใช่วัตถุ R เป็นชื่อสตริงอักขระของไฟล์นอก R

กลุ่ม Taylor & Francis

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

หากคุณคลิกไอคอนตัวกรองคุณจะได้รับตัวกรองสำหรับแต่ละคอลัมน์ Winterคอลัมน์อักขระทำงานเป็นคุณอาจคาดหวังการกรองสำหรับแถวใด ๆ ที่มีตัวอักษรที่คุณพิมพ์ใน. ถ้าคุณคลิกในTotalกรองคอลัมน์ตัวเลขของ แต่รุ่นเก่าของ RStudio แสดงเลื่อนในขณะที่คนรุ่นใหม่แสดง histogram และกล่องกรอง .

นำเข้าไฟล์จากเว็บ

หากคุณต้องการดาวน์โหลดและนำเข้าไฟล์จากเว็บคุณสามารถทำได้หากไฟล์นั้นเปิดเผยต่อสาธารณะและอยู่ในรูปแบบเช่น Excel หรือ CSV ลอง

snowdata <- rio :: import ("// bit.ly/BostonSnowfallCSV", รูปแบบ)

จำนวนมากของระบบสามารถปฏิบัติตาม URL การเปลี่ยนเส้นทางไปยังแฟ้มแม้หลังจากที่ครั้งแรกให้คุณข้อผิดพลาดตราบเท่าที่คุณระบุรูปแบบเป็นเพราะชื่อไฟล์ที่นี่ไม่รวมถึง"csv" .csvหากของคุณใช้ไม่ได้ให้ใช้ URL //raw.githubusercontent.com/smach/R4JournalismBook/master/data/BostonSnowfall.csv แทน

rio ยังสามารถนำเข้าตาราง HTML ที่มีรูปแบบดีจากหน้าเว็บได้ แต่ตารางจะต้องมีรูปแบบที่ดีมาก สมมติว่าคุณต้องการดาวน์โหลดตารางที่อธิบายการจัดอันดับความรุนแรงของพายุหิมะของ National Weather Service หน้าดัชนีปริมาณหิมะในภูมิภาคของศูนย์ข้อมูลสิ่งแวดล้อมแห่งชาติมีเพียงตารางเดียวซึ่งสร้างขึ้นมาอย่างดีดังนั้นโค้ดเช่นนี้ควรใช้งานได้:

rsi_description <- rio :: import ("//www.ncdc.noaa.gov/snow-and-ice/rsi/", format = "html")

โปรดทราบอีกครั้งว่าคุณต้องรวมรูปแบบในกรณีformat="html"นี้ เนื่องจาก URL เองไม่ได้ระบุว่าเป็นไฟล์ประเภทใด หาก URL มีชื่อไฟล์ที่มี.htmlนามสกุล rio จะรู้

แม้ว่าในชีวิตจริงข้อมูลเว็บแทบจะไม่ปรากฏในรูปแบบแยกต่างหากที่เป็นระเบียบ ตัวเลือกที่ดีสำหรับเคสที่สร้างมาไม่ดีมักจะเป็นแพ็คเกจ htmltab ติดตั้งด้วยinstall.packages("htmltab"). ฟังก์ชันของแพ็คเกจสำหรับการอ่านตาราง HTML เรียกอีกอย่างว่า htmltab แต่ถ้าคุณเรียกใช้สิ่งนี้:

ไลบรารี (htmltab) ตารางเมือง <- htmltab ("// en.wikipedia.org/wiki/List_of_United_States_cities_by_population") str (ตารางเมือง)

คุณเห็นว่าคุณไม่มีตารางที่ถูกต้องเนื่องจากกรอบข้อมูลมีวัตถุหนึ่งชิ้น เพราะผมไม่ได้ระบุที่โต๊ะก็ดึงตาราง HTML ในหน้าแรก นั่นไม่ได้เป็นสิ่งที่ฉันต้องการ ฉันไม่รู้สึกอยากนำเข้าทุกตารางในหน้าจนกว่าฉันจะพบตารางที่ถูกต้อง แต่โชคดีที่ฉันมีส่วนขยายของ Chrome ที่เรียกว่า Table Capture ซึ่งช่วยให้ฉันดูรายการตารางบนหน้าได้

ครั้งสุดท้ายที่ฉันตรวจสอบตารางที่ 5 ที่มีมากกว่า 300 แถวคือตารางที่ฉันต้องการ หากยังไม่ได้ผลให้ลองติดตั้ง Table Capture บนเบราว์เซอร์ Chrome เพื่อตรวจสอบว่าคุณต้องการดาวน์โหลดตารางใด

ฉันจะลองอีกครั้งโดยระบุตารางที่ 5 แล้วดูว่าชื่อคอลัมน์ใดในตารางเมืองใหม่ โปรดทราบว่าในโค้ดต่อไปนี้ฉันใส่citytable <- htmltab()คำสั่งลงในหลายบรรทัด ดังนั้นจึงไม่ได้วิ่งข้ามระยะขอบคุณสามารถเก็บทุกอย่างไว้ในบรรทัดเดียวได้ หากหมายเลขตารางมีการเปลี่ยนแปลงตั้งแต่โพสต์บทความนี้ให้แทนที่which = 5ด้วยหมายเลขที่ถูกต้อง

แทนที่จะใช้หน้าใน Wikipedia คุณสามารถแทนที่ URL ของ Wikipedia ด้วย URL ของสำเนาของไฟล์ที่ฉันสร้างขึ้น ไฟล์นั้นอยู่ที่ //bit.ly/WikiCityList หากต้องการใช้รุ่นที่พิมพ์bit.ly/WikiCityListลงในเบราว์เซอร์จากนั้นคัดลอก URL ที่ยาวมันเปลี่ยนเส้นทางไปและการใช้งานที่แทนของวิกิพีเดีย URL ในโค้ดด้านล่าง:

ไลบรารี (htmltab) citytable <- htmltab ("// th.wikipedia.org/wiki/List_of_United_States_cities_by_population" ซึ่ง = 5) colnames (citytable)

ฉันรู้whichได้อย่างไรว่าเป็นอาร์กิวเมนต์ที่ฉันต้องการระบุหมายเลขตาราง ผมอ่านไฟล์ช่วยเหลือในการใช้คำสั่งhtmltab ?htmltabซึ่งรวมข้อโต้แย้งที่มีอยู่ทั้งหมด ฉันสแกนความเป็นไปได้และ " whichเวกเตอร์ความยาวหนึ่งสำหรับระบุตารางในเอกสาร" ดูถูกต้อง

โปรดทราบว่าฉันใช้colnames(citytable)แทนnames(citytable)การดูชื่อคอลัมน์ อย่างใดอย่างหนึ่งจะทำงาน ฐาน R ยังมี  rownames()ฟังก์ชัน

อย่างไรก็ตามผลลัพธ์ของตารางเหล่านั้นดีกว่ามากแม้ว่าคุณจะเห็นได้จากการเรียกใช้str(citytable)ว่าคอลัมน์สองคอลัมน์ที่ควรเป็นตัวเลขเข้ามาเป็นสตริงอักขระ คุณสามารถดูนี้ทั้งโดยถัดจากชื่อคอลัมน์และอัญประกาศรอบค่าเช่นchr8,550,405

นี่เป็นหนึ่งในความน่ารำคาญเล็กน้อยของ R: โดยทั่วไปแล้ว R ไม่เข้าใจว่านั่น8,550คือตัวเลข ฉันจัดการกับปัญหานี้ด้วยตัวเองโดยการเขียนฟังก์ชันของตัวเองในแพ็กเกจ rmiscutils ของฉันเองเพื่อเปลี่ยน "สตริงอักขระ" ทั้งหมดที่เป็นตัวเลขจริง ๆ โดยมีลูกน้ำกลับมาเป็นตัวเลข ทุกคนสามารถดาวน์โหลดแพ็คเกจจาก GitHub และใช้งานได้

วิธีที่นิยมที่สุดในการติดตั้งแพ็คเกจจาก GitHub คือการใช้แพ็คเกจที่เรียกว่า devtools devtools เป็นแพ็คเกจที่ทรงพลังมากซึ่งออกแบบมาสำหรับผู้ที่ต้องการเขียนแพ็คเกจของตนเองเป็นส่วนใหญ่และรวมถึงวิธีการติดตั้งแพ็คเกจจากที่อื่น ๆ นอกเหนือจาก CRAN อย่างไรก็ตาม devtools มักจะต้องใช้ขั้นตอนพิเศษสองสามขั้นตอนในการติดตั้งเมื่อเทียบกับแพ็คเกจทั่วไปและฉันต้องการทิ้งงานผู้ดูแลระบบที่น่ารำคาญไว้จนกว่าจะจำเป็นจริงๆ

อย่างไรก็ตามแพ็คเกจ pacman ยังติดตั้งแพ็กเกจจากแหล่งที่ไม่ใช่ CRAN เช่น GitHub หากคุณยังไม่มีให้ติดตั้ง pacman ด้วยinstall.packages("pacman").

p_install_gh("username/packagerepo")ฟังก์ชันของ pacman ติดตั้งจาก repo GitHub

p_load_gh("username/packagerepo")โหลดแพ็กเกจลงในหน่วยความจำหากมีอยู่แล้วในระบบของคุณจากนั้นทำการติดตั้งก่อนจากนั้นโหลดแพ็กเกจจาก GitHub หากไม่มีแพ็กเกจในเครื่อง

แพคเกจสาธารณูปโภค rmisc smach/rmiscutilsของฉันสามารถพบได้ที่ เรียกใช้pacman::p_load_gh("smach/rmiscutils")เพื่อติดตั้งแพ็คเกจ rmiscutils ของฉัน

หมายเหตุ: แพคเกจทางเลือกสำหรับการติดตั้งแพคเกจจาก GitHub install.packages("remotes")เรียกว่ารีโมทซึ่งคุณสามารถติดตั้งผ่านทาง จุดประสงค์หลักคือการติดตั้งแพ็คเกจจากที่เก็บระยะไกลเช่น GitHub คุณสามารถดูไฟล์วิธีใช้ด้วยhelp(package="remotes").

และอาจเป็นไปได้ว่าสิ่งที่ลื่นที่สุดคือแพ็คเกจที่เรียกว่า githubinstall มีจุดมุ่งหมายเพื่อคาดเดา repo ที่บรรจุภัณฑ์อยู่ ติดตั้งผ่าน  install.packages("githubinstall"); จากนั้นคุณสามารถติดตั้งแพ็คเกจ rmiscutils ของฉันโดยใช้  githubinstall::gh_install_packages("rmiscutils")ไฟล์. คุณจะถูกถามว่าคุณต้องการติดตั้งแพ็คเกจที่smach/rmisutils(คุณทำ) หรือไม่

ตอนนี้คุณได้ติดตั้งชุดฟังก์ชันของฉันแล้วคุณสามารถใช้number_with_commas()ฟังก์ชันของฉันเพื่อเปลี่ยนสตริงอักขระที่ควรจะเป็นตัวเลขกลับไปเป็นตัวเลขได้ ฉันขอแนะนำอย่างยิ่งให้เพิ่มคอลัมน์ใหม่ลงใน data frame แทนที่จะแก้ไขคอลัมน์ที่มีอยู่นั่นคือแนวทางปฏิบัติในการวิเคราะห์ข้อมูลที่ดีไม่ว่าคุณจะใช้แพลตฟอร์มใดก็ตาม

PopEst2017ในตัวอย่างนี้ผมจะเรียกคอลัมน์ใหม่ (หากตารางได้รับการอัปเดตแล้วให้ใช้ชื่อคอลัมน์ที่เหมาะสม)

ห้องสมุด (rmiscutils) citytable $ PopEst2017 <- number_with_commas (citytable $ `2017 ค่าประมาณ ')

แพ็คเกจ rmiscutils ของฉันไม่ใช่วิธีเดียวในการจัดการกับหมายเลขที่นำเข้าที่มีเครื่องหมายจุลภาค หลังจากที่ฉันสร้างแพ็กเกจ rmiscutils และnumber_with_commas()หน้าที่ของมันแพ็กเกจ tidyverse readr ก็ถือกำเนิดขึ้น readr parse_number()นอกจากนี้ยังมีฟังก์ชั่นที่สตริงผลัดตัวอักษรลงในตัวเลข

หลังจากติดตั้ง readr คุณสามารถสร้างตัวเลขจากคอลัมน์ประมาณการปี 2017 ด้วย readr:

citytable $ PopEst2017 <- readr :: parse_number (citytable $ `2017 โดยประมาณ ')

ข้อดีอย่างหนึ่งreadr::parse_number()คือคุณสามารถกำหนดของคุณเองlocale()เพื่อควบคุมสิ่งต่างๆเช่นการเข้ารหัสและเครื่องหมายทศนิยมซึ่งอาจเป็นที่สนใจสำหรับผู้อ่านที่ไม่ได้อยู่ในสหรัฐอเมริกา เรียกใช้?parse_number เพื่อดูข้อมูลเพิ่มเติม

หมายเหตุ: หากคุณไม่ได้ใช้การเติมแท็บสำหรับคอลัมน์ประมาณการปี 2017 คุณอาจมีปัญหากับชื่อคอลัมน์นั้นหากมีช่องว่างในขณะที่คุณเรียกใช้รหัสนี้ ในโค้ดของฉันด้านบนสังเกตว่ามีเครื่องหมายอัญประกาศเดี่ยว ( `) ย้อนหลังรอบชื่อคอลัมน์ นั่นเป็นเพราะชื่อที่มีอยู่มีช่องว่างอยู่ซึ่งคุณไม่ควรมีใน R ชื่อคอลัมน์นั้นมีปัญหาอีกอย่างหนึ่ง: มันเริ่มต้นด้วยตัวเลขโดยทั่วไปคือ R no-no RStudio รู้เรื่องนี้และเพิ่มคำพูดย้อนกลับที่จำเป็นรอบ ๆ ชื่อโดยอัตโนมัติด้วยการเติมแท็บอัตโนมัติ

เคล็ดลับโบนัส: มีแพ็คเกจ R (แน่นอนว่ามี!) เรียกว่าภารโรงที่สามารถแก้ไขชื่อคอลัมน์ที่มีปัญหาโดยอัตโนมัติที่นำเข้าจากแหล่งข้อมูลที่ไม่เป็นมิตรกับ R ติดตั้งด้วยinstall.packages("janitor"). จากนั้นคุณสามารถสร้างชื่อคอลัมน์ใหม่โดยใช้clean_names()ฟังก์ชันของภารโรง

ตอนนี้ฉันจะสร้าง data frame ใหม่ทั้งหมดแทนที่จะเปลี่ยนชื่อคอลัมน์ใน data frame เดิมของฉันและเรียกใช้ clean_names () ของภารโรงในข้อมูลเดิม จากนั้นตรวจสอบชื่อคอลัมน์กรอบข้อมูลด้วยnames():

citytable_cleaned <- ภารโรง :: clean_names (citytable)

ชื่อ (citytable_cleaned)

คุณเห็นว่าช่องว่างถูกเปลี่ยนเป็นขีดล่างซึ่งถูกต้องตามกฎหมายในชื่อตัวแปร R (เช่นเดียวกับจุด) และชื่อคอลัมน์ทั้งหมดที่ใช้ขึ้นต้นด้วยตัวเลขจะมีxขึ้นต้นด้วย

หากคุณไม่ต้องการที่จะเสียหน่วยความจำโดยมีสองฉบับเป็นหลักข้อมูลเดียวกันคุณสามารถลบวัตถุ R จากเซสชั่นการทำงานของคุณด้วย  ฟังก์ชั่น:rm()rm(citytable)

นำเข้าข้อมูลจากแพ็คเกจ

มีหลายแพ็คเกจที่ให้คุณเข้าถึงข้อมูลได้โดยตรงจาก R One คือ quantmod ซึ่งช่วยให้คุณดึงข้อมูลรัฐบาลและการเงินบางส่วนไปยัง R ได้โดยตรง

อีกอย่างคือแพ็คเกจ weatherdata ที่มีชื่อเหมาะเจาะใน CRAN สามารถดึงข้อมูลจาก Weather Underground API ซึ่งมีข้อมูลของหลายประเทศทั่วโลก 

แพ็กเกจ rnoaa ซึ่งเป็นโครงการจากกลุ่ม rOpenSci ใช้ชุดข้อมูลการบริหารมหาสมุทรและบรรยากาศแห่งชาติของสหรัฐอเมริกาหลายชุดรวมถึงข้อมูลสภาพอากาศรายวันทุ่นและพายุ

หากคุณสนใจข้อมูลของรัฐหรือรัฐบาลท้องถิ่นในสหรัฐอเมริกาหรือแคนาดาคุณอาจต้องการตรวจสอบ RSocrata เพื่อดูว่าหน่วยงานที่คุณสนใจโพสต์ข้อมูลที่นั่นหรือไม่ ฉันยังไม่พบรายการชุดข้อมูล Socrata ทั้งหมดที่มีอยู่ แต่มีหน้าค้นหาที่ //www.opendatanetwork.com อย่างไรก็ตามโปรดระวัง: มีชุดข้อมูลที่อัปโหลดโดยชุมชนพร้อมกับข้อมูลที่เป็นทางการของรัฐบาลดังนั้นโปรดตรวจสอบเจ้าของชุดข้อมูลและแหล่งที่มาของการอัปโหลดก่อนที่จะใช้ชุดข้อมูลมากกว่า R ผลลัพธ์“ ODN Dataset” หมายความว่าเป็นไฟล์ที่อัปโหลดโดยบุคคลทั่วไป อย่างเป็นทางการของรัฐบาลชุดข้อมูลมีแนวโน้มที่จะอาศัยอยู่ที่ URL ที่เหมือนและ//data.CityOrStateName.gov //data.CityOrStateName.us

สำหรับแพ็คเกจการนำเข้าข้อมูลเพิ่มเติมโปรดดูแผนภูมิที่ค้นหาได้ของฉันที่ //bit.ly/RDataPkgs หากคุณทำงานกับข้อมูลของรัฐบาลสหรัฐฯคุณอาจสนใจเป็นพิเศษในการสำรวจสำมะโนประชากรและ tidycensus ซึ่งทั้งสองอย่างนี้ใช้ข้อมูลของ US Census Bureau แพ็คเกจข้อมูลภาครัฐที่เป็นประโยชน์อื่น ๆ ได้แก่ eu.us.opendata จากรัฐบาลสหรัฐอเมริกาและสหภาพยุโรปเพื่อให้ง่ายต่อการเปรียบเทียบข้อมูลในทั้งสองภูมิภาคและการยกเลิกข้อมูลสำมะโนประชากรของแคนาดา

เมื่อข้อมูลไม่ได้รับการจัดรูปแบบอย่างเหมาะสม

ในกรณีข้อมูลตัวอย่างทั้งหมดนี้ไม่เพียง แต่มีการจัดรูปแบบที่ดีเท่านั้น แต่ยังเหมาะอย่างยิ่งเมื่อฉันพบแล้วมันได้รับการจัดโครงสร้างอย่างสมบูรณ์แบบสำหรับ R ฉันหมายถึงอะไร? เป็นรูปสี่เหลี่ยมผืนผ้าโดยแต่ละเซลล์มีค่าเดียวแทนที่จะเป็นเซลล์ที่ผสาน และแถวแรกมีส่วนหัวของคอลัมน์ซึ่งตรงข้ามกับคำพูดคือแถวชื่อเรื่องเป็นแบบอักษรขนาดใหญ่ในหลายเซลล์เพื่อให้ดูสวยหรือไม่มีส่วนหัวคอลัมน์เลย

น่าเสียดายที่การจัดการกับข้อมูลที่ไม่เป็นระเบียบอาจค่อนข้างซับซ้อน แต่มีปัญหาทั่วไปสองสามอย่างที่แก้ไขได้ง่าย

เริ่มต้นแถวที่ไม่ได้เป็นส่วนหนึ่งของข้อมูล หากคุณรู้ว่าสองสามแถวแรกของสเปรดชีต Excel ไม่มีข้อมูลที่คุณต้องการคุณสามารถบอกให้ rio ข้ามบรรทัดอย่างน้อยหนึ่งบรรทัดได้ ไวยากรณ์คือrio::import("mySpreadsheet.xlsx", skip=3)การไม่รวมสามแถวแรก skipรับจำนวนเต็ม

ไม่มีชื่อคอลัมน์ในสเปรดชีต การนำเข้าเริ่มต้นถือว่าแถวแรกของแผ่นงานของคุณคือชื่อคอลัมน์ หากข้อมูลของคุณไม่มีส่วนหัวแถวแรกของข้อมูลอาจลงท้ายด้วยส่วนหัวคอลัมน์ของคุณ เพื่อหลีกเลี่ยงสิ่งนั้นให้ใช้rio::import("mySpreadsheet.xlsx", col_names = FALSE)ดังนั้น R จะสร้างส่วนหัวเริ่มต้นของ X0, X1, X2 และอื่น ๆ หรือใช้ไวยากรณ์เช่นrio::import("mySpreadsheet.xlsx", col_names = c("City", "State", "Population"))ตั้งชื่อคอลัมน์ของคุณเอง

หากมีหลายแท็บในสเปรดชีตของคุณwhichอาร์กิวเมนต์จะลบล้างค่าเริ่มต้นของการอ่านในแผ่นงานแรก rio::import("mySpreadsheet.xlsx", which = 2)อ่านในแผ่นงานที่สอง

กรอบข้อมูลคืออะไร? แล้วคุณจะทำอะไรได้บ้าง?

rio นำเข้าสเปรดชีตหรือไฟล์ CSV เป็น R กรอบข้อมูล คุณรู้ได้อย่างไรว่าคุณมี data frame หรือไม่? ในกรณีของsnowdataให้class(snowdata)ส่งคืนคลาสหรือประเภทของอ็อบเจ็กต์ที่เป็น str(snowdata)ยังบอกคุณในชั้นเรียนและเพิ่มข้อมูลอีกเล็กน้อย ข้อมูลส่วนใหญ่ที่คุณเห็นstr()คล้ายกับที่คุณเห็นสำหรับตัวอย่างนี้ในบานหน้าต่างสภาพแวดล้อม RStudio: snowdataมีการสังเกตการณ์ 76 รายการ (แถว) และสองตัวแปร (คอลัมน์)

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

หากคุณมีคอลัมน์กรอบข้อมูลที่มีค่า 5, 7, 4 และ“ มูลค่าที่จะมา” R จะไม่เพียงแค่ไม่พอใจและทำให้คุณมีข้อผิดพลาด แต่จะบังคับให้ค่าทั้งหมดของคุณเป็นประเภทข้อมูลเดียวกัน เพราะ“ความคุ้มค่าที่จะมา” ไม่สามารถกลายเป็นหมายเลข 5, 7 และ 4 จะจบลงกลายเป็นสตริงตัวละคร"5", และ"7" "4"โดยปกติแล้วนี่ไม่ใช่สิ่งที่คุณต้องการดังนั้นจึงควรทราบว่าข้อมูลประเภทใดอยู่ในแต่ละคอลัมน์ ค่าสตริงอักขระหลงทางหนึ่งค่าในคอลัมน์ที่มีตัวเลข 1,000 ตัวสามารถเปลี่ยนสิ่งทั้งหมดให้เป็นอักขระได้ หากคุณต้องการตัวเลขให้แน่ใจว่าคุณมี!

R มีวิธีการอ้างอิงถึงข้อมูลที่ขาดหายไปซึ่งจะไม่ทำให้คอลัมน์ที่เหลือของคุณNAเสียหาย: หมายถึง“ ไม่พร้อมใช้งาน”

กรอบข้อมูลเป็นรูปสี่เหลี่ยมผืนผ้า: แต่ละแถวจะต้องมีจำนวนรายการเท่ากัน (แม้ว่าบางรายการจะว่างได้) และแต่ละคอลัมน์จะต้องมีจำนวนรายการเท่ากัน

มักจะ Excel คอลัมน์สเปรดชีตจะเรียกตามตัวอักษร: คอลัมน์คอลัมน์ B ฯลฯ dataFrameName$columnNameคุณสามารถอ้างถึงคอลัมน์กรอบข้อมูลที่มีชื่อของมันโดยใช้ไวยากรณ์ ดังนั้นหากคุณพิมพ์snowdata$Totalและกด Enter คุณจะเห็นค่าทั้งหมดในTotalคอลัมน์ดังแสดงในรูปด้านล่าง (นั่นเป็นเหตุผลที่เมื่อคุณเรียกใช้str(snowdata)คำสั่งจะมีเครื่องหมายดอลลาร์อยู่หน้าชื่อของแต่ละคอลัมน์)

กลุ่ม Taylor & Francis

ขอเตือนว่าตัวเลขที่อยู่ด้านซ้ายของรายการไม่ได้เป็นส่วนหนึ่งของข้อมูล พวกเขากำลังบอกคุณว่าตำแหน่งของข้อมูลแต่ละบรรทัดเริ่มต้นด้วยอะไร [1]หมายความว่าบรรทัดนั้นเริ่มต้นด้วยรายการแรกในเวกเตอร์[10]ที่สิบ ฯลฯ

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

พิมพ์snowdata$และรอจากนั้นคุณจะเห็นรายการชื่อคอลัมน์ทั้งหมดใน snowdata

เพิ่มคอลัมน์ลงในเฟรมข้อมูลได้อย่างง่ายดาย ปัจจุบันTotalคอลัมน์นี้แสดงปริมาณหิมะในฤดูหนาวเป็นนิ้ว หากต้องการเพิ่มคอลัมน์ที่แสดงผลรวมเป็นเมตรคุณสามารถใช้รูปแบบนี้:

snowdata $ เมตร <- snowdata $ Total * 0.0254

ชื่อของคอลัมน์ใหม่อยู่ทางซ้ายและมีสูตรทางด้านขวา ใน Excel คุณอาจใช้=A2 * 0.0254แล้วคัดลอกสูตรลงในคอลัมน์ ด้วยสคริปต์คุณไม่ต้องกังวลว่าคุณจะใช้สูตรกับค่าทั้งหมดในคอลัมน์อย่างถูกต้องหรือไม่

ตอนนี้ดูsnowdataวัตถุของคุณในแท็บสภาพแวดล้อม มันควรมีตัวแปรที่สาม, Meters.

เนื่องจากsnowdataเป็น data frame จึงมีคุณสมบัติ data-frame บางอย่างที่คุณสามารถเข้าถึงได้จากบรรทัดคำสั่ง nrow(snowdata) ให้จำนวนแถวและncol(snowdata)จำนวนคอลัมน์ ได้คุณสามารถดูสิ่งนี้ได้ในสภาพแวดล้อม RStudio เพื่อดูว่ามีการสังเกตและตัวแปรจำนวนเท่าใด แต่อาจมีบางครั้งที่คุณต้องการทราบว่าเป็นส่วนหนึ่งของสคริปต์ colnames(snowdata)หรือnames(snowdata) ให้ชื่อsnowdataคอลัมน์ rownames(snowdata) ให้ชื่อแถวใด ๆ (หากไม่มีการตั้งค่าจะเป็นค่าเริ่มต้นของสตริงอักขระของหมายเลขแถวเช่น"1", "2", "3",ฯลฯ )

ฟังก์ชันดาต้าเฟรมพิเศษเหล่านี้บางส่วนหรือที่เรียกว่าเมธอดไม่เพียง แต่ให้ข้อมูลแก่คุณเท่านั้น แต่ยังให้คุณเปลี่ยนลักษณะของเฟรมข้อมูลได้อีกด้วย ดังนั้นnames(snowdata)บอกชื่อคอลัมน์ในกรอบข้อมูล แต่

ชื่อ (snowdata) <- c ("Winter", "SnowInches", "SnowMeters")

เปลี่ยนชื่อคอลัมน์ในกรอบข้อมูล

คุณอาจไม่จำเป็นต้องรู้วิธีการที่มีอยู่ทั้งหมดสำหรับออบเจ็กต์เฟรมข้อมูล แต่ถ้าคุณสงสัยให้methods(class=class(snowdata)) แสดง เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใด ๆ รันการสอบถามความช่วยเหลือตามปกติด้วยเครื่องหมายคำถามเช่นหรือ?merge?subset

เมื่อตัวเลขไม่ใช่ตัวเลขจริงๆ

รหัสไปรษณีย์เป็นตัวอย่างที่ดีของ "ตัวเลข" ที่ไม่ควรถือเป็นเช่นนั้น แม้ว่าในทางเทคนิคจะเป็นตัวเลข แต่ก็ไม่สมเหตุสมผลที่จะทำสิ่งต่างๆเช่นเพิ่มรหัสไปรษณีย์สองรหัสเข้าด้วยกันหรือใช้ค่าเฉลี่ยของรหัสไปรษณีย์ในชุมชน หากคุณนำเข้าคอลัมน์รหัสไปรษณีย์ R จะเปลี่ยนเป็นคอลัมน์ตัวเลข และหากคุณกำลังจัดการกับพื้นที่ในนิวอิงแลนด์ที่รหัสไปรษณีย์ขึ้นต้นด้วย 0 เลข 0 จะหายไป

ฉันมีไฟล์รหัสไปรษณีย์บอสตันแบบแบ่งแท็บตามพื้นที่ใกล้เคียงซึ่งดาวน์โหลดจากหน่วยงานรัฐบาลแมสซาชูเซตส์ที่ หากฉันพยายามนำเข้าด้วยzips <- rio::import("bostonzips.txt")รหัสไปรษณีย์จะอยู่ในรูปแบบ 2118, 2119 ฯลฯ ไม่ใช่ 02118, 02119 เป็นต้น

ซึ่งจะช่วยให้ทราบข้อมูลเล็กน้อยเกี่ยวกับฟังก์ชันพื้นฐานที่ฟังก์ชันของ rio import()ใช้ คุณสามารถหาฟังก์ชั่นพื้นฐานเหล่านั้นโดยการอ่านแฟ้มความช่วยเหลือที่import ?importสำหรับการดึงไฟล์ที่คั่นด้วยแท็บให้importใช้fread()จากแพ็กเกจ data.table หรือread.table()ฟังก์ชันbase R วิธีใช้?read.tableระบุว่าคุณสามารถระบุคลาสคอลัมน์ด้วยcolClassesอาร์กิวเมนต์ได้

สร้างไดเร็กทอรีย่อยข้อมูลในไดเร็กทอรีโปรเจ็กต์ปัจจุบันของคุณจากนั้นดาวน์โหลดไฟล์ bostonzips.txt ด้วย

download.file ("// raw.githubusercontent.com/smach/R4JournalismBook/master/data/bostonzips.txt", "data / bostonzips.txt")

หากคุณนำเข้าไฟล์นี้โดยระบุคอลัมน์ทั้งสองเป็นสตริงอักขระรหัสไปรษณีย์จะอยู่ในรูปแบบที่เหมาะสม:

ซิป <- rio :: import ("data / bostonzips.txt", colClasses = c ("character" "," character ")) str (zips)

โปรดทราบว่าต้องตั้งค่าคลาสคอลัมน์โดยใช้c()ฟังก์ชัน, c("character", "character"). หากคุณลองcolClasses, "character"คุณจะได้รับข้อความแสดงข้อผิดพลาด นี้เป็นข้อผิดพลาดทั่วไปสำหรับ R เริ่มต้น แต่ก็ไม่ควรใช้เวลานานที่จะได้รับเป็นc()นิสัย

เคล็ดลับในการช่วยตัวเองในการพิมพ์: การเขียนออกมาc("character", "character")ไม่ใช่เรื่องยากทั้งหมด แต่ถ้าคุณมีสเปรดชีตที่มี 16 คอลัมน์โดยที่ 14 รายการแรกต้องเป็นสตริงอักขระสิ่งนี้อาจสร้างความรำคาญได้ rep()ฟังก์ชันR สามารถช่วยได้ rep()ที่คุณอาจจะเดาได้ซ้ำสิ่งที่รายการคุณให้มัน rep(myitem, numtimes)แต่หลายครั้งที่คุณบอกว่าจะใช้รูปแบบ rep("character", 2)เป็นเช่นเดียวกับc("character", "character")เพื่อให้เทียบเท่ากับcolClasses = rep("character", 2) colClasses = c("character", "character")และcolClasses = c(rep("character", 14), rep("numeric", 2)) ตั้งค่า 14 คอลัมน์แรกเป็นสตริงอักขระและสองคอลัมน์สุดท้ายเป็นตัวเลข ชื่อคลาสคอลัมน์ทั้งหมดที่นี่ต้องอยู่ในเครื่องหมายคำพูดเนื่องจากชื่อเป็นสตริงอักขระ

ฉันขอแนะนำให้คุณเล่นเล็กน้อยrep()เพื่อให้คุณคุ้นเคยกับรูปแบบเนื่องจากเป็นไวยากรณ์ที่ฟังก์ชัน R อื่น ๆ ใช้ด้วย

ข้อมูลตัวอย่างง่าย ๆ

R มาพร้อมกับชุดข้อมูลในตัวที่ใช้งานง่ายหากคุณต้องการเล่นกับฟังก์ชันใหม่ ๆ หรือเทคนิคการเขียนโปรแกรมอื่น ๆ พวกเขายังใช้กันมากโดยคนที่สอน R เนื่องจากผู้สอนสามารถมั่นใจได้ว่านักเรียนทุกคนเริ่มต้นด้วยข้อมูลเดียวกันในรูปแบบเดียวกันทั้งหมด

พิมพ์data()เพื่อดูชุดข้อมูลในตัวที่มีอยู่ใน R ฐานและแพ็คเกจที่ติดตั้งใด ๆ ที่โหลดอยู่ data(package = .packages(all.available = TRUE))จากฐาน R แสดงชุดข้อมูลที่เป็นไปได้ทั้งหมดจากแพ็กเกจที่ติดตั้งในระบบของคุณไม่ว่าจะโหลดลงในหน่วยความจำในเซสชันการทำงานปัจจุบันของคุณหรือไม่ก็ตาม

คุณสามารถรับข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลชุดเดียวกับที่คุณจะได้รับความช่วยเหลือเกี่ยวกับฟังก์ชั่น: หรือ?datasetname help("datasetname")mtcars และไอริสเป็นหนึ่งในสิ่งที่ฉันเห็นใช้บ่อยมาก

หากคุณพิมพ์mtcarsชุดข้อมูล mtcars ทั้งหมดจะพิมพ์ออกมาในคอนโซลของคุณ คุณสามารถใช้ฟังก์ชั่นที่จะดูที่ไม่กี่แถวแรกที่มีhead()head(mtcars)

cardata <- mtcarsคุณสามารถจัดเก็บว่าชุดข้อมูลในตัวแปรอื่นถ้าคุณต้องการที่มีรูปแบบเช่น

หรือเรียกใช้ฟังก์ชันข้อมูลด้วยชื่อชุดข้อมูลเช่นdata(mtcars)โหลดชุดข้อมูลลงในสภาพแวดล้อมการทำงานของคุณ

หนึ่งในแพ็คเกจที่น่าสนใจที่สุดพร้อมชุดข้อมูลตัวอย่างสำหรับนักข่าวคือแพ็คเกจที่ห้าสิบสามสิบซึ่งมีข้อมูลจากเรื่องราวที่เผยแพร่บนเว็บไซต์ FiveThirtyEight.com แพ็คเกจนี้ถูกสร้างขึ้นโดยนักวิชาการหลายคนโดยปรึกษาหารือกับบรรณาธิการ FiveThirtyEight ได้รับการออกแบบมาเพื่อเป็นแหล่งข้อมูลสำหรับการสอนสถิติระดับปริญญาตรี

ข้อมูลที่จัดเตรียมไว้ล่วงหน้าอาจเป็นประโยชน์และในบางกรณีก็น่าสนุก อย่างไรก็ตามในโลกแห่งความเป็นจริงคุณอาจไม่ได้ใช้ข้อมูลที่บรรจุในแพ็คเกจที่สะดวกมากนัก

สร้างกรอบข้อมูลด้วยตนเองใน R

มีโอกาสที่คุณจะจัดการกับข้อมูลที่เริ่มต้นนอก R และคุณนำเข้าจากสเปรดชีตไฟล์ CSV API หรือแหล่งอื่น ๆ แต่บางครั้งคุณอาจต้องการพิมพ์ข้อมูลจำนวนเล็กน้อยลงใน R โดยตรงหรือสร้างกรอบข้อมูลด้วยตนเอง ลองมาดูวิธีการทำงานอย่างรวดเร็ว

เฟรม R ข้อมูลประกอบคอลัมน์คอลัมน์โดยเริ่มต้นไม่ได้เป็นหนึ่งแถวในเวลา หากคุณต้องการรวบรวมกรอบข้อมูลอย่างรวดเร็วของผลการเลือกตั้งระดับเมืองคุณสามารถสร้างเวกเตอร์ของชื่อผู้สมัครเวกเตอร์ที่สองที่มีความเกี่ยวข้องกับพรรคของพวกเขาจากนั้นเวกเตอร์ของผลรวมการลงคะแนน:

ผู้สมัคร <- c ("Smith", "Jones", "Write-ins", "Blanks")

พรรค <- c ("Democrat", "Republican", "", "")

คะแนน <- c (15248, 16723, 230, 5234)

อย่าลืมใช้จุลภาคในตัวเลขของคุณเช่นเดียวกับที่คุณทำใน Excel

ในการสร้างกรอบข้อมูลจากคอลัมน์เหล่านั้นให้ใช้data.frame()ฟังก์ชันและsynatx data.frame(column1, column2, column3).

myresults <- data.frame (ผู้สมัครปาร์ตี้คะแนนเสียง)

ตรวจสอบโครงสร้างด้วยstr():

str(myresults)

ในขณะที่ผู้สมัครและเวกเตอร์ปาร์ตี้เป็นตัวอักษรคอลัมน์กรอบข้อมูลผู้สมัครและปาร์ตี้ถูกเปลี่ยนเป็นคลาสของวัตถุ R ที่เรียกว่าแฟกเตอร์ ในตอนนี้มันค่อนข้างเกินไปที่จะเจาะลึกว่าปัจจัยต่างจากตัวละครอย่างไรยกเว้นจะบอกว่า

  1. ปัจจัยที่จะมีประโยชน์ถ้าคุณต้องการที่จะรับรายการสั่งซื้อสินค้าบางวิธี nonalphabetical สำหรับกราฟและวัตถุประสงค์อื่น ๆ เช่นPoorน้อยกว่าFairน้อยกว่าน้อยกว่าGoodExcellent
  2. ปัจจัยต่างๆสามารถทำงานได้แตกต่างจากที่คุณคาดหวังในบางครั้ง ฉันขอแนะนำให้ใช้สตริงอักขระเว้นแต่คุณจะมีเหตุผลที่ดีในการต้องการปัจจัยโดยเฉพาะ

คุณสามารถทำให้สตริงอักขระของคุณไม่เสียหายเมื่อสร้างเฟรมข้อมูลโดยการเพิ่มอาร์กิวเมนต์stringsAsFactors = FALSE:

myresults <- data.frame (ผู้สมัครปาร์ตี้คะแนนเสียง stringsAsFactors = FALSE) str (myresults)

ตอนนี้ค่าเป็นสิ่งที่คุณคาดหวัง

มีอีกสิ่งหนึ่งที่ฉันต้องเตือนคุณเกี่ยวกับการสร้าง data frames ด้วยวิธีนี้: ถ้าคอลัมน์หนึ่งสั้นกว่าอีกคอลัมน์หนึ่งในบางครั้ง R จะทำซ้ำข้อมูลจากคอลัมน์ที่สั้นกว่าไม่ว่าคุณจะต้องการให้เกิดขึ้นหรือไม่ก็ตาม

ตัวอย่างเช่นคุณสร้างคอลัมน์ผลการเลือกตั้งสำหรับผู้สมัครและพรรค แต่ป้อนเฉพาะผลการโหวตให้กับ Smith และ Jones ไม่ใช่สำหรับการเขียนและช่องว่าง คุณอาจคาดหวังกรอบข้อมูลจะแสดงให้เห็นอีกสองรายการเป็นที่ว่างเปล่าแต่คุณต้องการจะผิด ลองใช้ดูโดยสร้างเวกเตอร์โหวตใหม่โดยใช้ตัวเลขเพียงสองตัวและใช้เวกเตอร์โหวตใหม่เพื่อสร้างกรอบข้อมูลอื่น:

คะแนน <- c (15248, 16723)

myresults2 <- data.frame (ผู้สมัครปาร์ตี้คะแนนเสียง)

str (myresults2)

ถูกต้อง R ใช้ตัวเลขสองตัวแรกซ้ำซึ่งไม่ใช่สิ่งที่คุณต้องการอย่างแน่นอน หากคุณลองใช้ตัวเลขสามตัวในเวกเตอร์โหวตแทนที่จะเป็นสองหรือสี่ R จะทำให้เกิดข้อผิดพลาด นั่นเป็นเพราะแต่ละรายการไม่สามารถรีไซเคิลได้ในจำนวนครั้งเดียวกัน

หากตอนนี้คุณกำลังคิดว่า“ ทำไมฉันไม่สามารถสร้าง data frames ที่ไม่เปลี่ยนสตริงเป็นปัจจัยโดยอัตโนมัติ และเหตุใดฉันจึงต้องกังวลว่าเฟรมข้อมูลจะนำข้อมูลของคอลัมน์หนึ่งกลับมาใช้ใหม่หากฉันลืมกรอกข้อมูลทั้งหมด” Hadley Wickham มีความคิดเดียวกัน แพ็กเกจ tibble ของเขาสร้างคลาส R หรือที่เรียกว่า tibble ซึ่งเขาบอกว่าเป็น "เฟรมข้อมูลที่ทันสมัย พวกเขายังคงรักษาคุณสมบัติที่ได้รับการทดสอบมาตลอดเวลาและทิ้งคุณสมบัติที่เคยสะดวก แต่ตอนนี้น่าหงุดหงิด "

หากสิ่งนี้ดึงดูดใจคุณให้ติดตั้งแพ็คเกจ tibble หากไม่ได้อยู่ในระบบของคุณจากนั้นลองสร้าง tibble ด้วย

myresults3 <- tibble :: tibble (ผู้สมัครพรรคโหวต)

และคุณจะได้รับข้อความแสดงข้อผิดพลาดว่าคอลัมน์โหวตต้องมีความยาว 4 สี่รายการหรือยาวหนึ่งรายการ ( tibble()จะทำซ้ำรายการเดียวหลาย ๆ ครั้งตามต้องการ แต่จะมีเพียงรายการเดียวเท่านั้น)

ใส่คอลัมน์โหวตกลับเป็นสี่รายการหากคุณต้องการสร้างข้อมูลนี้:

ห้องสมุด (tibble)

คะแนน <- c (15248, 16723, 230, 5234)

myresults3 <- tibble (ผู้สมัครพรรคคะแนนเสียง)

str (myresults3)

ดูเหมือนว่า data frame อันที่จริงมันก็คือ data frame แต่มีพฤติกรรมพิเศษบางอย่างเช่นวิธีการพิมพ์ โปรดสังเกตด้วยว่าคอลัมน์ตัวเลือกคือสตริงอักขระไม่ใช่ปัจจัย

หากคุณชอบพฤติกรรมนี้ให้ใช้ tibbles อย่างไรก็ตามเนื่องจากเฟรมข้อมูลแบบเดิมที่มีอยู่ใน R ยังคงเป็นสิ่งสำคัญที่จะต้องทราบเกี่ยวกับพฤติกรรมเริ่มต้น

การส่งออกข้อมูล

บ่อยครั้งหลังจากที่คุณโต้แย้งข้อมูลของคุณใน R คุณต้องการบันทึกผลลัพธ์ของคุณ ต่อไปนี้เป็นวิธีการส่งออกข้อมูลของคุณที่ฉันมักจะใช้บ่อยที่สุด:

บันทึกเป็นไฟล์ CSVด้วยrio::export(myObjectName, file="myFileName.csv")และลงในไฟล์ Excel ด้วยไฟล์ rio::export(myObjectName, file="myFileName.xlsx"). rio เข้าใจว่าคุณต้องการรูปแบบไฟล์ใดตามนามสกุลของชื่อไฟล์ มีรูปแบบอื่น ๆ ที่พร้อมใช้งานรวมถึง.tsvข้อมูลที่คั่นด้วยแท็บ.jsonสำหรับ JSON และ.xmlXML

บันทึกลงในวัตถุไบนารี Rที่ทำให้ง่ายต่อการโหลดกลับไปที่ R ในเซสชันในอนาคต มีสองทางเลือก

Generic save() บันทึกวัตถุอย่างน้อยหนึ่งรายการลงในไฟล์เช่นsave(objectName1, objectName2, file="myfilename.RData"). หากต้องการอ่านข้อมูลนี้กลับไปที่ R คุณเพียงแค่ใช้คำสั่งload("myfilename.RData")และวัตถุทั้งหมดจะกลับมาพร้อมกับชื่อเดียวกันในสถานะเดียวกันกับที่เคยมีมาก่อน

คุณยังสามารถบันทึกวัตถุชิ้นเดียวลงในไฟล์ด้วยไฟล์saveRDS(myobject, file="filename.rds"). สมมติฐานตรรกะคือว่า loadRDS จะอ่านกลับแฟ้มใน แต่แทนที่จะเป็นคำสั่งreadRDSและอื่นในกรณีนี้เพียงแค่ข้อมูลที่ได้รับการจัดเก็บไว้ไม่ได้ชื่อวัตถุ ดังนั้นคุณต้องอ่านข้อมูลในชื่อออบเจ็กต์ใหม่เช่นmydata <- readRDS("filename.rds").

มีวิธีที่สามในการบันทึกวัตถุ R โดยเฉพาะสำหรับ R: การสร้างคำสั่ง R ที่จะสร้างวัตถุขึ้นใหม่แทนวัตถุด้วยผลลัพธ์สุดท้าย ฐาน R ฟังก์ชั่นสำหรับการสร้างไฟล์ R เพื่อสร้างเป็นวัตถุหรือdput() dump()อย่างไรก็ตามฉันพบว่าrio::export(myobject, "mysavedfile.R")ง่ายต่อการจดจำ

สุดท้ายมีวิธีเพิ่มเติมในการบันทึกไฟล์ที่ปรับให้เหมาะกับความสามารถในการอ่านความเร็วหรือการบีบอัดซึ่งฉันพูดถึงในส่วนแหล่งข้อมูลเพิ่มเติมในตอนท้ายของบทความนี้

นอกจากนี้คุณยังสามารถส่งออกวัตถุ R ใน Windows หรือ Mac rio::export(myObjectName, format)ของคุณคลิปบอร์ดกับริโอ: และคุณสามารถนำเข้าข้อมูลลง R rio::import(file)จากคลิปบอร์ดของคุณด้วยวิธีเดียวกัน:

โบนัส: convert()ฟังก์ชั่นของ rio ช่วยให้คุณ - คุณเดาได้ - แปลงไฟล์ประเภทหนึ่งไปเป็นอีกประเภทหนึ่งโดยไม่ต้องดึงข้อมูลเข้าด้วยตนเองแล้วออกจาก R ดู?convertข้อมูลเพิ่มเติม

จุดสุดท้าย: RStudio ให้คุณคลิกเพื่อนำเข้าไฟล์โดยไม่ต้องเขียนโค้ดเลย นี่ไม่ใช่สิ่งที่ฉันแนะนำจนกว่าคุณจะสะดวกในการนำเข้าจากบรรทัดคำสั่งเพราะฉันคิดว่าสิ่งสำคัญคือต้องเข้าใจโค้ดที่อยู่เบื้องหลังการนำเข้า แต่ฉันยอมรับว่านี่อาจเป็นทางลัดที่มีประโยชน์

ในแท็บไฟล์ของบานหน้าต่างด้านขวาล่างของ RStudio ให้ไปที่ไฟล์ที่คุณต้องการนำเข้าแล้วคลิก คุณจะเห็นตัวเลือกในการดูไฟล์หรือนำเข้าชุดข้อมูล เลือกนำเข้าชุดข้อมูลเพื่อดูกล่องโต้ตอบที่แสดงตัวอย่างข้อมูลช่วยให้คุณแก้ไขวิธีการนำเข้าข้อมูลและดูตัวอย่างรหัสที่จะสร้างขึ้น

ทำการเปลี่ยนแปลงตามที่คุณต้องการแล้วคลิกนำเข้าจากนั้นข้อมูลของคุณจะถูกดึงไปที่ R

แหล่งข้อมูลเพิ่มเติม

ทางเลือกของ rio ในขณะที่ rio เป็นมีดที่ยอดเยี่ยมของ Swiss Army ในการจัดการไฟล์ แต่อาจมีบางครั้งที่คุณต้องการควบคุมวิธีดึงหรือบันทึกข้อมูลของคุณจาก R ให้มากขึ้นนอกจากนี้ยังมีบางครั้งที่ฉันมีความท้าทาย ไฟล์ข้อมูลที่ rio สำลัก แต่แพ็คเกจอื่นสามารถจัดการได้ ฟังก์ชั่นและแพ็คเกจอื่น ๆ ที่คุณอาจต้องการสำรวจ:

  • Base R read.csv()และread.table()เพื่อนำเข้าไฟล์ข้อความ (ใช้?read.csvและ?read.tableรับข้อมูลเพิ่มเติม) stringsAsFactors = FALSEจำเป็นสำหรับสิ่งเหล่านี้หากคุณต้องการให้สตริงอักขระของคุณเป็นสตริงอักขระ write.csv() บันทึกเป็น CSV
  • rio ใช้แพ็คเกจ readxl ของ Hadley Wickham เพื่ออ่านไฟล์ Excel อีกทางเลือกหนึ่งสำหรับ Excel คือ openxlsx ซึ่งสามารถเขียนลงในไฟล์ Excel และอ่านได้ ดูที่แพ็คเกจ openxlsx สะเปะสะปะสำหรับข้อมูลเกี่ยวกับการจัดรูปแบบสเปรดชีตของคุณเมื่อคุณส่งออก
  • แพ็คเกจ readr ของ Wickham ก็คุ้มค่าที่จะดูเป็นส่วนหนึ่งของ "tidyverse" readr มีฟังก์ชันในการอ่าน CSV, แท็บคั่น, ความกว้างคงที่, บันทึกเว็บและไฟล์ประเภทอื่น ๆ readr พิมพ์ประเภทของข้อมูลที่กำหนดไว้สำหรับแต่ละคอลัมน์ - จำนวนเต็มอักขระคู่ (ตัวเลขที่ไม่ใช่จำนวนเต็ม) ฯลฯ ซึ่งจะสร้าง tibbles

นำเข้าโดยตรงจาก Google สเปรดชีตแพ็คเกจ googlesheets ช่วยให้คุณสามารถนำเข้าข้อมูลจากสเปรดชีต Google ชีตแม้ว่าจะเป็นแบบส่วนตัวก็ตามโดยการตรวจสอบสิทธิ์บัญชี Google ของคุณ แพคเกจมีอยู่ใน CRAN; ติดตั้งผ่าน  install.packages("googlesheets"). หลังจากโหลดเสร็จแล้วlibrary("googlesheets")ให้อ่านบทความสั้น ๆ เบื้องต้นที่ยอดเยี่ยม ในขณะที่เขียนนี้บทความสั้น ๆ ของอินโทรมีอยู่ใน R ที่vignette("basic-usage", package="googlesheets") หากคุณไม่เห็นให้ลองhelp(package="googlesheets")คลิกลิงก์คู่มือการใช้งานแพ็คเกจวิกเน็ตต์และเอกสารประกอบอื่น ๆ เพื่อดูสะเปะสะปะที่มีอยู่หรือดูข้อมูลแพ็คเกจบน GitHub ที่ //github.com/jennybc/googlesheets

ขูดข้อมูลจากเว็บเพจด้วยแพ็คเกจ rvest และส่วนขยายเบราว์เซอร์ SelectorGadget หรือ bookmarklet JavaScript SelectorGadget ช่วยให้คุณค้นพบองค์ประกอบ CSS ของข้อมูลที่คุณต้องการคัดลอกที่อยู่ในหน้า HTML จากนั้น rvest ใช้ R เพื่อค้นหาและบันทึกข้อมูลนั้น นี่ไม่ใช่เทคนิคสำหรับมือใหม่ แต่เมื่อคุณมีประสบการณ์ R ภายใต้เข็มขัดของคุณแล้วคุณอาจต้องการกลับมาทบทวนอีกครั้ง ฉันมีคำแนะนำและวิดีโอเกี่ยวกับการดำเนินการนี้ที่ //bit.ly/Rscraping RStudio มีการสัมมนาผ่านเว็บตามความต้องการเช่นกัน

ทางเลือกในการบันทึกและอ่านฟังก์ชันฐาน Rหากคุณกำลังทำงานกับชุดข้อมูลขนาดใหญ่ความเร็วอาจมีความสำคัญต่อคุณเมื่อบันทึกและโหลดไฟล์ แพ็กเกจ data.table มีfread()ฟังก์ชันที่รวดเร็วแต่โปรดระวังว่าอ็อบเจ็กต์ที่เป็นผลลัพธ์คือ data.tables ไม่ใช่เฟรมข้อมูลธรรมดา พฤติกรรมบางอย่างแตกต่างกัน หากคุณต้องการ data frame แบบเดิมคุณสามารถหาได้ด้วยas.data.frame(mydatatable)ไวยากรณ์fwrite()ฟังก์ชันของแพ็คเกจ data.table มุ่งเป้าไปที่การเขียนไปยังไฟล์ CSV เร็วกว่า R ของฐานwrite.csv()มาก

แพคเกจอื่น ๆ อีกสองแพ็กเกจที่น่าสนใจสำหรับการจัดเก็บและดึงข้อมูล แพ็คเกจขนนกจะบันทึกในรูปแบบไบนารีที่สามารถอ่านได้ทั้งใน R หรือ Python และแพคเกจ FST ของread.fst()และwrite.fst()นำเสนอได้อย่างรวดเร็วประหยัดและการโหลดของกรอบ R ข้อมูลวัตถุบวกตัวเลือกในการบีบอัดไฟล์