R Chọn (), Bộ lọc (), Sắp xếp (), Đường ống với Ví dụ

Mục lục:

Anonim

Trong hướng dẫn này, bạn sẽ học

  • lựa chọn()
  • Bộ lọc ()
  • Đường ống
  • sắp xếp()

Thư viện được gọi là dplyr chứa các động từ có giá trị để điều hướng bên trong tập dữ liệu. Thông qua hướng dẫn này, bạn sẽ sử dụng tập dữ liệu Thời gian di chuyển. Tập dữ liệu thu thập thông tin về chuyến đi do tài xế dẫn giữa nhà của anh ta và nơi làm việc của anh ta. Có mười bốn biến trong tập dữ liệu, bao gồm:

  • DayOfWeek: Xác định ngày trong tuần mà người lái xe sử dụng ô tô của mình
  • Khoảng cách: Tổng quãng đường của hành trình
  • MaxSpeed: Tốc độ tối đa của hành trình
  • TotalTime: Độ dài tính bằng phút của hành trình

Tập dữ liệu có khoảng 200 quan sát trong tập dữ liệu và các chuyến đi diễn ra từ thứ Hai đến thứ Sáu.

Trước hết, bạn cần:

  • tải tập dữ liệu
  • kiểm tra cấu trúc của dữ liệu.

Một tính năng hữu ích với dplyr là hàm gluxit (). Đây là một cải tiến so với str (). Chúng ta có thể sử dụng gluxit () để xem cấu trúc của tập dữ liệu và quyết định thao tác nào được yêu cầu.

library(dplyr)PATH <- "https://raw.githubusercontent.com/guru99-edu/R-Programming/master/travel_times.csv"df <- read.csv(PATH)glimpse(df)

Đầu ra:

## Observations: 205## Variables: 14## $ X  1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,… ## $ Date  1/6/2012, 1/6/2012, 1/4/2012, 1/4/2012, 1/3/20… ## $ StartTime  16:37, 08:20, 16:17, 07:53, 18:57, 07:57, 17:3… ## $ DayOfWeek  Friday, Friday, Wednesday, Wednesday, Tuesday,… ## $ GoingTo  Home, GSK, Home, GSK, Home, GSK, Home, GSK, GS… ## $ Distance  51.29, 51.63, 51.27, 49.17, 51.15, 51.80, 51.37… ## $ MaxSpeed  127.4, 130.3, 127.4, 132.3, 136.2, 135.8, 123.2… ## $ AvgSpeed  78.3, 81.8, 82.0, 74.2, 83.4, 84.5, 82.9, 77.5,… ## $ AvgMovingSpeed  84.8, 88.9, 85.8, 82.9, 88.1, 88.8, 87.3, 85.9,… ## $ FuelEconomy  , , , , , , -, -, 8.89, 8.89, 8.89, 8.89, 8.89… ## $ TotalTime  39.3, 37.9, 37.5, 39.8, 36.8, 36.8, 37.2, 37.9,… ## $ MovingTime  36.3, 34.9, 35.9, 35.6, 34.8, 35.0, 35.3, 34.3,… ## $ Take407All  No, No, No, No, No, No, No, No, No, No, No, No… ## $ Comments  , , , , , , , , , , , , , , , Put snow tires o… 

Điều này hiển nhiên là biến Comments cần được chẩn đoán thêm. Các quan sát đầu tiên của biến Nhận xét chỉ là các giá trị bị thiếu.

sum(df$Comments =)

Giải thích mã

  • sum (df $ Comments == ""): Tính tổng các quan sát bằng "" trong cột nhận xét từ df

Đầu ra:

## [1] 181 

lựa chọn()

Chúng ta sẽ bắt đầu với động từ select (). Chúng ta không nhất thiết phải cần tất cả các biến và một phương pháp hay là chỉ chọn những biến mà bạn thấy có liên quan.

Chúng tôi có 181 quan sát bị thiếu, gần 90% tập dữ liệu. Nếu bạn quyết định loại trừ chúng, bạn sẽ không thể tiếp tục phân tích.

Khả năng khác là bỏ biến Comment với động từ select ().

Chúng ta có thể chọn các biến theo nhiều cách khác nhau với select (). Lưu ý rằng, đối số đầu tiên là tập dữ liệu.

- `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.

Bạn có thể sử dụng cách thứ ba để loại trừ biến Nhận xét.

step_1_df <- select(df, -Comments)dim(df)

Đầu ra:

## [1] 205 14
dim(step_1_df)

Đầu ra:

## [1] 205 13 

Tập dữ liệu gốc có 14 tính năng trong khi step_1_df có 13.

Bộ lọc ()

Động từ filter () giúp giữ cho các quan sát theo sau một tiêu chí. Bộ lọc () hoạt động giống như select (), trước tiên bạn chuyển khung dữ liệu và sau đó là một điều kiện được phân tách bằng dấu phẩy:

filter(df, condition)arguments:- df: dataset used to filter the data- condition: Condition used to filter the data

Một tiêu chí

Trước hết, bạn có thể đếm số lượng quan sát trong mỗi cấp của một biến nhân tố.

table(step_1_df$GoingTo)

Giải thích mã

  • table (): Đếm số lượng quan sát theo cấp độ. Lưu ý, chỉ có biến mức yếu tố được chấp nhận
  • table (step_1_df $ GoingTo): Đếm số chuyến đi đến điểm đến cuối cùng.

Đầu ra:

#### GSK Home## 105 100

Bảng chức năng () cho biết 105 chuyến đi sẽ đến GSK và 100 chuyến về Nhà.

Chúng ta có thể lọc dữ liệu để trả về một tập dữ liệu với 105 quan sát và một tập khác với 100 quan sát.

# Select observationsif GoingTo == Homeselect_home <- filter(df, GoingTo == "Home")dim(select_home)

Đầu ra:

## [1] 100 14
# Select observationsif GoingTo == Workselect_work <- filter(df, GoingTo == "GSK")dim(select_work)

Đầu ra:

## [1] 105 14 

Nhiều tiêu chí

Chúng tôi có thể lọc một tập dữ liệu có nhiều hơn một tiêu chí. Ví dụ: bạn có thể trích xuất các quan sát trong đó điểm đến là Nhà riêng và diễn ra vào Thứ Tư.

select_home_wed <- filter(df, GoingTo == "Home" & DayOfWeek == "Wednesday")dim(select_home_wed)

Đầu ra:

## [1] 23 14 

23 quan sát phù hợp với tiêu chí này.

Đường ống

Việc tạo tập dữ liệu đòi hỏi nhiều thao tác, chẳng hạn như:

  • nhập khẩu
  • hợp nhất
  • lựa chọn
  • lọc
  • và như thế

Thư viện dplyr đi kèm với một toán tử thực tế,%>%, được gọi là đường ống . Tính năng đường ống giúp thao tác sạch sẽ, nhanh chóng và ít bị lỗi.

Toán tử này là một mã thực hiện các bước mà không cần lưu các bước trung gian vào ổ cứng. Nếu bạn quay lại ví dụ của chúng tôi ở trên, bạn có thể chọn các biến quan tâm và lọc chúng. Chúng tôi có ba bước:

  • Bước 1: Nhập dữ liệu: Nhập dữ liệu gps
  • Bước 2: Chọn dữ liệu: Chọn GoingTo và DayOfWeek
  • Bước 3: Lọc dữ liệu: Chỉ trả về Trang chủ và Thứ tư

Chúng ta có thể sử dụng cách khó để làm điều đó:

# Step 1step_1 <- read.csv(PATH)# Step 2step_2 <- select(step_1, GoingTo, DayOfWeek)# Step 3step_3 <- filter(step_2, GoingTo == "Home", DayOfWeek == "Wednesday")head(step_3)

Đầu ra:

## GoingTo DayOfWeek## 1 Home Wednesday## 2 Home Wednesday## 3 Home Wednesday## 4 Home Wednesday## 5 Home Wednesday## 6 Home Wednesday

Đó không phải là một cách thuận tiện để thực hiện nhiều thao tác, đặc biệt là trong tình huống có nhiều bước. Môi trường kết thúc với rất nhiều đối tượng được lưu trữ.

Thay vào đó, hãy sử dụng toán tử đường ống%>%. Chúng ta chỉ cần xác định khung dữ liệu được sử dụng lúc đầu và tất cả quá trình sẽ diễn ra từ đó.

Cú pháp cơ bản của đường ống

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 anymoreNote: Create a new variable is optional. If not included, the output will be displayed in the console.

Bạn có thể tạo đường dẫn đầu tiên của mình theo các bước được liệt kê ở trên.

# Create the data frame filter_home_wed.It will be the object return at the end of the pipelinefilter_home_wed <-#Step 1read.csv(PATH) % > %#Step 2select(GoingTo, DayOfWeek) % > %#Step 3filter(GoingTo == "Home",DayOfWeek == "Wednesday")identical(step_3, filter_home_wed)

Đầu ra:

## [1] TRUE 

Chúng tôi đã sẵn sàng tạo một tập dữ liệu tuyệt đẹp với nhà điều hành đường ống.

sắp xếp()

Trong hướng dẫn trước, bạn học cách sắp xếp các giá trị bằng hàm sort (). Thư viện dplyr có chức năng sắp xếp. Nó hoạt động giống như một sự quyến rũ với đường ống. Động từ sắp xếp () có thể sắp xếp lại một hoặc nhiều hàng, tăng dần (mặc định) hoặc giảm dần.

- `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 

Chúng tôi có thể sắp xếp khoảng cách theo điểm đến.

# Sort by destination and distancestep_2_df <-step_1_df %>%arrange(GoingTo, Distance)head

Đầu ra:

## 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

Tóm lược

Trong bảng dưới đây, bạn tóm tắt tất cả các thao tác bạn đã học được trong quá trình hướng dẫn.

Động từ Mục tiêu Giải trình
nhìn thoáng qua kiểm tra cấu trúc của một df
glimpse(df)
Giống hệt với str ()
lựa chọn() Chọn / loại trừ các biến
select(df, A, B ,C)
Chọn các biến A, B và C
select(df, A:C)
Chọn tất cả các biến từ A đến C
select(df, -C)
Loại trừ C
bộ lọc () Lọc df dựa trên một hoặc nhiều điều kiện
filter(df, condition1)
Một điều kiện
filter(df, condition1
ondition2)
sắp xếp() Sắp xếp tập dữ liệu với một hoặc nhiều biến
arrange(A)
Sắp xếp tăng dần của biến A
arrange(A, B)
Sắp xếp tăng dần của biến A và B
arrange(desc(A), B)
Loại giảm dần của biến A và loại tăng dần của B
%>% Tạo một đường dẫn giữa mỗi bước
step 1 %>% step 2 %>% step 3