R เลือก(), กรอง(), จัดเรียง(), ไปป์ไลน์พร้อมตัวอย่าง
ไลบรารีที่เรียกว่า dplyr มีคำกริยาอันมีค่าเพื่อนำทางภายในชุดข้อมูล คุณจะใช้ชุดข้อมูลเวลาเดินทางผ่านบทช่วยสอนนี้ ชุดข้อมูลจะรวบรวมข้อมูลเกี่ยวกับการเดินทางโดยคนขับระหว่างบ้านและที่ทำงานของเขา ชุดข้อมูลมีตัวแปร 14 ตัว ได้แก่:
- DayOfWeek: ระบุวันในสัปดาห์ที่คนขับใช้รถของเขา
- ระยะทาง: ระยะทางรวมของการเดินทาง
- MaxSpeed: ความเร็วสูงสุดของการเดินทาง
- TotalTime: ความยาวเป็นนาทีของการเดินทาง
ชุดข้อมูลมีการสังเกตประมาณ 200 รายการในชุดข้อมูล และการขี่เกิดขึ้นระหว่างนั้น Monday ถึงวันศุกร์
ก่อนอื่น คุณต้อง:
- โหลดชุดข้อมูล
- ตรวจสอบโครงสร้างของข้อมูล
ฟีเจอร์ที่มีประโยชน์อย่างหนึ่งของ dplyr คือฟังก์ชัน glimse() นี่คือการปรับปรุงมากกว่า str() เราสามารถใช้ gimpse() เพื่อดูโครงสร้างของชุดข้อมูลและตัดสินใจว่าจำเป็นต้องมีการจัดการแบบใด
library(dplyr) PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv" df <- read.csv(PATH) glimpse(df)
Output:
## Observations: 205 ## Variables: 14 ## $ X <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ... ## $ Date <fctr> 1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20... ## $ StartTime <fctr> 16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3... ## $ DayOfWeek <fctr> Friday, Friday, Wednesday, Wednesday, Tuesday,... ## $ GoingTo <fctr> Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS... ## $ Distance <dbl> 51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37... ## $ MaxSpeed <dbl> 127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2... ## $ AvgSpeed <dbl> 78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,... ## $ AvgMovingSpeed <dbl> 84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,... ## $ FuelEconomy <fctr> , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89... ## $ TotalTime <dbl> 39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,... ## $ MovingTime <dbl> 36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,... ## $ Take407All <fctr> No, No, No, No, No, No, No, No, No, No, No, No... ## $ Comments <fctr> , , , , , , , , , , , , , , , Put snow tires o...
เห็นได้ชัดว่าความคิดเห็นของตัวแปรจำเป็นต้องได้รับการวินิจฉัยเพิ่มเติม การสังเกตครั้งแรกของตัวแปร Comments มีเพียงค่าที่ขาดหายไป
sum(df$Comments =="")
คำอธิบายรหัส
- sum(df$Comments ==””): รวมข้อสังเกตที่มีค่าเท่ากับ “” ในความคิดเห็นของคอลัมน์จาก df
Output:
## [1] 181
เลือก()
เราจะเริ่มต้นด้วยกริยา select() เราไม่จำเป็นต้องใช้ตัวแปรทั้งหมด และแนวทางปฏิบัติที่ดีคือเลือกเฉพาะตัวแปรที่คุณคิดว่าเกี่ยวข้องเท่านั้น
เรามีข้อสังเกตที่ขาดหายไป 181 รายการ เกือบ 90 เปอร์เซ็นต์ของชุดข้อมูล หากคุณตัดสินใจที่จะยกเว้น คุณจะไม่สามารถดำเนินการวิเคราะห์ต่อไปได้
ความเป็นไปได้อีกอย่างคือปล่อยตัวแปร Comment ด้วยกริยา select()
เราสามารถเลือกตัวแปรได้หลายวิธีด้วย select() โปรดทราบว่าอาร์กิวเมนต์แรกคือชุดข้อมูล
- `select(df, A, B ,C)`: Select the variables A, B and C from df dataset. - `select(df, A:C)`: Select all variables from A to C from df dataset. - `select(df, -C)`: Exclude C from the dataset from df dataset.
คุณสามารถใช้วิธีที่สามเพื่อยกเว้นตัวแปร Comments
step_1_df <- select(df, -Comments) dim(df)
Output:
## [1] 205 14
dim(step_1_df)
Output:
## [1] 205 13
ชุดข้อมูลดั้งเดิมมี 14 คุณสมบัติในขณะที่ step_1_df มี 13 คุณสมบัติ
กรอง()
กริยา filter() ช่วยให้การสังเกตเป็นไปตามเกณฑ์ที่กำหนด filter() ทำงานเหมือนกับ select() ทุกประการ คุณส่งเฟรมข้อมูลก่อน จากนั้นจึงส่งเงื่อนไขโดยคั่นด้วยเครื่องหมายจุลภาค:
filter(df, condition) arguments: - df: dataset used to filter the data - condition: Condition used to filter the data
เกณฑ์หนึ่ง
ประการแรก คุณสามารถนับจำนวนการสังเกตภายในแต่ละระดับของตัวแปรปัจจัยได้
table(step_1_df$GoingTo)
คำอธิบายรหัส
- table(): นับจำนวนการสังเกตตามระดับ หมายเหตุ ยอมรับเฉพาะตัวแปรระดับปัจจัยเท่านั้น
- table(step_1_df$GoingTo): นับจำนวนการเดินทางไปยังจุดหมายปลายทางสุดท้าย
Output:
## ## GSK Home ## 105 100
ตารางฟังก์ชัน() ระบุว่ามีรถ 105 คันไปที่ GSK และ 100 คันไปที่ Home
เราสามารถกรองข้อมูลเพื่อส่งคืนชุดข้อมูลชุดหนึ่งที่มีการสังเกต 105 ครั้ง และอีกชุดหนึ่งที่มีการสังเกต 100 ครั้ง
# Select observations if GoingTo == Home select_home <- filter(df, GoingTo == "Home") dim(select_home)
Output:
## [1] 100 14
# Select observations if GoingTo == Work select_work <- filter(df, GoingTo == "GSK") dim(select_work)
Output:
## [1] 105 14
เกณฑ์หลายประการ
เราสามารถกรองชุดข้อมูลที่มีมากกว่าหนึ่งเกณฑ์ได้ ตัวอย่างเช่น คุณสามารถดึงข้อมูลข้อสังเกตที่ปลายทางคือบ้านและเกิดขึ้นในวันพุธได้
select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday") dim(select_home_wed)
Output:
## [1] 23 14
ข้อสังเกต 23 รายการตรงกับเกณฑ์นี้
ท่อ
การสร้างชุดข้อมูลต้องมีการดำเนินการมากมาย เช่น:
- การนำเข้า
- การผสม
- การเลือก
- กรอง
- เป็นต้น
ไลบรารี dplyr มาพร้อมกับตัวดำเนินการใช้งานจริง %>% เรียกว่า ท่อ- คุณสมบัติไปป์ไลน์ทำให้การจัดการสะอาด รวดเร็ว และไม่เกิดข้อผิดพลาด
ตัวดำเนินการนี้เป็นโค้ดที่ดำเนินการขั้นตอนต่างๆ โดยไม่บันทึกขั้นตอนกลางๆ ลงในฮาร์ดไดรฟ์ หากคุณกลับมาดูตัวอย่างด้านบน คุณสามารถเลือกตัวแปรที่สนใจและกรองตัวแปรเหล่านั้นได้ เรามีสามขั้นตอน:
- ขั้นตอนที่ 1: นำเข้าข้อมูล: นำเข้าข้อมูล GPS
- ขั้นตอนที่ 2: เลือกข้อมูล: เลือก GoingTo และ DayOfWeek
- ขั้นตอนที่ 3: กรองข้อมูล: ส่งคืนเฉพาะหน้าแรกและวันพุธ
เราสามารถใช้วิธีที่ยากในการทำมันได้:
# Step 1 step_1 <- read.csv(PATH) # Step 2 step_2 <- select(step_1, GoingTo, DayOfWeek) # Step 3 step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday") head(step_3)
Output:
## GoingTo DayOfWeek ## 1 Home Wednesday ## 2 Home Wednesday ## 3 Home Wednesday ## 4 Home Wednesday ## 5 Home Wednesday ## 6 Home Wednesday
นั่นไม่ใช่วิธีที่สะดวกในการดำเนินการหลายอย่าง โดยเฉพาะในสถานการณ์ที่มีขั้นตอนมากมาย สภาพแวดล้อมจะจบลงด้วยการจัดเก็บวัตถุจำนวนมาก
ลองใช้ตัวดำเนินการไปป์ไลน์ %>% แทน เราเพียงแค่ต้องกำหนดเฟรมข้อมูลที่ใช้ในตอนเริ่มต้น และกระบวนการทั้งหมดจะไหลจากเฟรมนั้น
ไวยากรณ์พื้นฐานของไปป์ไลน์
New_df <- df %>% step 1 %>% step 2 %>% ... arguments - New_df: Name of the new data frame - df: Data frame used to compute the step - step: Instruction for each step - Note: The last instruction does not need the pipe operator `%`, you don't have instructions to pipe anymore Note: Create a new variable is optional. If not included, the output will be displayed in the console.
คุณสามารถสร้างท่อแรกของคุณได้โดยทำตามขั้นตอนที่ระบุไว้ข้างต้น
# Create the data frame filter_home_wed.It will be the object return at the end of the pipeline filter_home_wed <- #Step 1 read.csv(PATH) % > % #Step 2 select(GoingTo, DayOfWeek) % > % #Step 3 filter(GoingTo == "Home",DayOfWeek == "Wednesday") identical(step_3, filter_home_wed)
Output:
## [1] TRUE
เรามีความพร้อมที่จะสร้างชุดข้อมูลที่น่าทึ่งด้วยตัวดำเนินการท่อ
จัด()
ตัว Vortex Indicator ได้ถูกนำเสนอลงในนิตยสาร กวดวิชาก่อนหน้านี้คุณจะได้เรียนรู้วิธีจัดเรียงค่าด้วยฟังก์ชัน sort() ไลบรารี dplyr มีฟังก์ชันการเรียงลำดับ มันใช้งานได้อย่างมีเสน่ห์กับไปป์ไลน์ กริยา Arrange() สามารถเรียงลำดับแถวใหม่ได้ตั้งแต่หนึ่งแถวขึ้นไป (ค่าเริ่มต้น) หรือจากมากไปน้อย
- `arrange(A)`: Ascending sort of variable A - `arrange(A, B)`: Ascending sort of variable A and B - `arrange(desc(A), B)`: Descending sort of variable A and ascending sort of B
เราสามารถจัดเรียงระยะทางตามจุดหมายปลายทางได้
# Sort by destination and distance step_2_df <-step_1_df %>% arrange(GoingTo, Distance) head<step_2_df)
Output:
## X Date StartTime DayOfWeek GoingTo Distance MaxSpeed AvgSpeed ## 1 193 7/25/2011 08:06 Monday GSK 48.32 121.2 63.4 ## 2 196 7/21/2011 07:59 Thursday GSK 48.35 129.3 81.5 ## 3 198 7/20/2011 08:24 Wednesday GSK 48.50 125.8 75.7 ## 4 189 7/27/2011 08:15 Wednesday GSK 48.82 124.5 70.4 ## 5 95 10/11/2011 08:25 Tuesday GSK 48.94 130.8 85.7 ## 6 171 8/10/2011 08:13 Wednesday GSK 48.98 124.8 72.8 ## AvgMovingSpeed FuelEconomy TotalTime MovingTime Take407All ## 1 78.4 8.45 45.7 37.0 No ## 2 89.0 8.28 35.6 32.6 Yes ## 3 87.3 7.89 38.5 33.3 Yes ## 4 77.8 8.45 41.6 37.6 No ## 5 93.2 7.81 34.3 31.5 Yes ## 6 78.8 8.54 40.4 37.3 No
สรุป
ในตารางด้านล่างนี้ คุณจะสรุปการดำเนินการทั้งหมดที่คุณได้เรียนรู้ในระหว่างบทช่วยสอน
คำกริยา | วัตถุประสงค์ | รหัส | คำอธิบาย |
---|---|---|---|
เหลือบ | ตรวจสอบโครงสร้างของ df |
glimpse(df) |
เหมือนกับ str() |
เลือก() | เลือก/ไม่รวมตัวแปร |
select(df, A, B ,C) |
เลือกตัวแปร A, B และ C |
select(df, A:C) |
เลือกตัวแปรทั้งหมดจาก A ถึง C | ||
select(df, -C) |
ไม่รวม C | ||
กรอง() | กรอง df ตามเงื่อนไขหนึ่งหรือหลายเงื่อนไข |
filter(df, condition1) |
เงื่อนไขหนึ่ง |
filter(df, condition1 |
ครั้งต่อไป2) | ||
จัด() | จัดเรียงชุดข้อมูลด้วยตัวแปรหนึ่งหรือหลายตัวแปร |
arrange(A) |
การเรียงลำดับของตัวแปร A จากน้อยไปหามาก |
arrange(A, B) |
การเรียงลำดับของตัวแปร A และ B จากน้อยไปหามาก | ||
arrange(desc(A), B) |
การเรียงลำดับของตัวแปร A จากมากไปน้อยและการเรียงลำดับจากน้อยไปหามากของ B | ||
- | สร้างไปป์ไลน์ระหว่างแต่ละขั้นตอน |
step 1 %>% step 2 %>% step 3 |